使用过Python编程都知道, Python安装都是可以使用pip
安装搞定:
sudo pip install
<package name>
那么如何发布一个自己的pypi Python包呢.
首先安装一个setuptools
sudo pip install setuptools
- 第一步, 就是到pypi上注册自己的用户, 点击"Register", 填写自己的用户名, 密码, 邮件地
- 第二步, 准备 setup.py/setup.conf 文件, 它是放在你的包的根目录的, 这一步直观重要, 包括要发布的包的名字, 版本, license, 描述, 特性(classifier)等等, 下面是我自己包的一个setup.py文件的内容, 基本上只需要在这个上面修改就可以了, 具体如下:
#!/usr/bin/env python
# coding=utf-8
from setuptools import setup, find_packages
setup(
name='<项目的名称>',
version=<项目版本>,
description=(
'<项目的简单描述>'
),
long_description=open('README.rst').read(),
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license='BSD License',
packages=find_packages(),
platforms=["all"],
url='<项目的网址,我一般都是github的url>',
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)
需要注意的上面的字段:
- version - 就是包的发布版本, 可以直接写在这里, 也可以从其他地方引用
- long_description - 必须是rst(reStructuredText) 格式的, 因为这个里面的内容是显示在pypi包首页上, 具体rst的语法可以参考: 点我, 我的long_description 是同目录下的README.rst 的内容, 同事这个README也是我的github项目首页.
- packages - 申明你的包里面要包含的目录, 比如[‘mypackage’, ‘mypackage_test’] 可以是这种使用我的示例, 让setuptools自动决定要包含那些包
- install_requires - 申明依赖包, 安装包时pip会自动安装: 格式如下
install_requires=[
'Twisted>=13.1.0',
'w3lib>=1.17.0',
'queuelib',
'lxml',
'pyOpenSSL',
'cssselect>=0.9',
'six>=1.5.2',
'parsel>=1.1',
'PyDispatcher>=2.0.5',
'service_identity',
]
- 装备requirements.txt 和 test-requirements.txt, 这个申明包的依赖包和跑自动化测试的测试依赖包, 具体格式示例如下:
mock>=2.0.0
flake8>=3.2.1
eventlet>=0.19.0
nose2>=0.6.5
cov_core>=1.15.0
virtualenv>=15.1.0
test-requiremtns.txt的格式和上面的格式一样.
有了它们, 就可以自己手动安装依赖包了
pip install -r requirements.txt
有了它们, 结合tox等工具, 可以非常方便的加入自动化测试.
- 准备一个项目的README.rst文件, 前面也提到了它的格式要求, 第一次发包, 可以直接copy别人的格式, 这种东西熟能生巧, 多写几次就会了.
- 准备好上面的步骤, 一个包就基本完整了, 剩下的就是打包了(cd 到包的根目录):
可以使用下面命令打包一个源代码的包:
python setup.py sdist build
这样在当前目录的dist文件夹下, 就会多出一个tar.gz结尾的包了:
也可以打包一个wheels格式的包, 使用下面的命令就可以了:
python setup.py bdist_wheel --universal
这样会在dist文件夹下面生成一个whl文件.
6. 上传生成的包, 可以使用setuptools, 或者twine上传, 推荐使用twine上次, 因为使用setuptools上传时, 你的用户名和密码是明文或者未加密传输, 安全起见还是使用twine吧
上传 source 包
python setup.py sdist upload
上传pre-compiled包
python setup.py bdist_wheel upload
使用twine上传, 先安装twine
sudo pip install twine
twine upload dist/*
提示你输入前面注册的账户和密码, 上传成功就搞定了, 就可以使用pip 在任何地方安装了.