Bottle 源码阅读(二) -- Python 项目的开源到 Pypi 服务器
Pypi 服务, 类似 Java 的 maven 仓库, 用来托管开源的 Python 模块. 发布 Python 模块, 必须要配置好 setup.py
等配置文件.
一般待发布的项目目录, 大概有下面文件
.
|-- LICENSE.txt
|-- MANIFEST.in
|-- README.rst
|-- data
| `-- data_file
|-- sample
| |-- __init__.py
| `-- package_data.dat
|-- sample.egg-info
| |-- PKG-INFO
| |-- SOURCES.txt
| |-- dependency_links.txt
| |-- entry_points.txt
| |-- requires.txt
| `-- top_level.txt
|-- setup.cfg
|-- setup.py
|-- tests
| |-- __init__.py
| |-- __init__.pyc
| |-- __pycache__
| | `-- test_simple.cpython-27-PYTEST.pyc
| `-- test_simple.py
`-- tox.ini
1. 准备 setup.py
参考官网的 Writing the Setup Script 例子. 一个简单的 setup.py
文件内容:
#!/usr/bin/env python
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='[email protected]',
url='https://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
主要参数说明:
name: 包名称, 也就是能够通过 import name 被导入的名字
packages: 安装的包的路径
version: 版本号
description: PyPI首页的一句话短描述
long_description: PyPI首页的正文, 通常就是 README.rst 文件中的内容
url: 你的项目主页, 通常是项目的Github主页
download_url: 你项目源码的下载链接
license: 版权协议名
2. 准备 setup.cfg MANIFEST.in
setup.cfg 是一个 ini 格式的文件,可能包含传递给 setup.py 的命令的可选默认值。
MANIFEST.in 此文件中包含有不属于内部包目录,但你仍想纳入进来的文件。这些文件通常是 readme 文件,license 文件以及一些类似的文件。其中,比较重要的一个是 requirements.txt。 pip 使用该文件安装其他必须的包。
include LICENSE
include README.md
include requirements.txt
3. 本地测试
setup.py文件的使用:
# 制作分发包
% python setup.py sdist
# 本地安装测试
% pip install dist/six_web-1.0.0.tar.gz --upgrade
# 本地卸载
% pip uninstall six_web
4. 上传到服务器
本地测试完成后, 去 Pypi官网 注册账号, 然后将 wheel 包上传到服务器, wheel 包的好处是安装的时候, 无需构建, 速度较快, 上传到服务器有两种方式
# 安装 wheel 工具
pip install wheel
此处有个坑, 记得在 setup.py 文件引入 setup 包时, 优先使用 setuptools 中的 setup
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
4.1 使用 twine 上传
twine是一个专门用于发布项目到PyPI的工具,可以使用 pip install twine
来安装.
# 生成 wheel 安装包
python setup.py bdist_wheel
# 上传安装包
twine upload -u username -p password dist/six_web-1.0.0-py3-none-any.whl
可以在服务器上直接看到上传的包了
参考资料
- https://packaging.python.org/tutorials/distributing-packages/
- https://github.com/pypa/sampleproject
- https://stackoverflow.com/questions/26664102/why-can-i-not-create-a-wheel-in-python
- https://github.com/fish267/six-web
- https://pypi.python.org/pypi?name=six-web&version=1.0.0&:action=display
blog comments powered by Disqus
Published
19 October 2017