pypi.python.org_在Pypi上发布自己的Python包
使用Python編程的都知道,Python的包安裝非常的方便,一般都是可以pip來(lái)安裝搞定:
sudo pip install
最近因?yàn)轫?xiàng)目上的需要,發(fā)布了一個(gè)自己的pypi Python包,這里我大致分享如何發(fā)布自己的Pypi包一般過(guò)程。
打包工作主要依賴(lài)python的一個(gè)叫setuptools的包來(lái)完成,在進(jìn)行下面操作前請(qǐng)使用pip安裝它:
sudo pip install setuptools
(這里面我都是假設(shè)你已經(jīng)準(zhǔn)備好你的代碼,測(cè)試代碼以及目錄結(jié)構(gòu),加上我今天要分享的,就可以組成一個(gè)完整的python包)
1. 第一步,就是到pypi(https://pypi.python.org/pypi)上注冊(cè)自己的用戶(hù), 點(diǎn)擊“Register”,填寫(xiě)自己的用戶(hù)名,密碼,郵件地址后,就成功了。
記住自己的用戶(hù)名和密碼,后面上傳的時(shí)候要輸入的
2. 準(zhǔn)備setup.py/setup.conf文件,它是放在你包的根目錄的,這一步至關(guān)重要,包括要發(fā)布的包名字,版本,license,描述,特性(classifier)等等,下面是我自己包的一個(gè)setup.py文件的內(nèi)容,基本上只需要在這個(gè)上面修改就行了,具體如下:
#!/usr/bin/env python#coding=utf-8
from setuptools importsetup, 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='',
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 - 這個(gè)簡(jiǎn)單,就是包的發(fā)布的版本,可以直接寫(xiě)在這,也可以從其他地方引用過(guò)來(lái)。
long_description - 必須是rst(reStructuredText )格式的,因?yàn)檫@個(gè)里面的內(nèi)容是顯示在pypi包首頁(yè)上,具體rst的語(yǔ)法可以參考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html
我的long_description是同目錄下的README.rst的內(nèi)容,同時(shí)這個(gè)README也是我的github項(xiàng)目首頁(yè)。
packages - 申明你的包里面要包含的目錄,比如 ?['mypackage', 'mypackage_test']可以是這種使用我的示例,讓setuptools自動(dòng)決定要包含哪些包
install_requires - 申明依賴(lài)包,安裝包時(shí)pip會(huì)自動(dòng)安裝:格式如下(我上面的setup.py沒(méi)有這個(gè)參數(shù),因?yàn)槲也灰蕾?lài)第三方包:)):
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',
]
3. 準(zhǔn)備requirements.txt 和 test-requirements.txt,這個(gè)申明包的依賴(lài)包和跑自動(dòng)化測(cè)試的測(cè)試依賴(lài)包,具體格式示例如下:
mock>=2.0.0
flake8>=3.2.1eventlet>=0.19.0
nose2>=0.6.5cov_core>=1.15.0
virtualenv>=15.1.0
以上是我的test-requirements.txt的內(nèi)容,requirements.txt的格式個(gè)上面一樣。
準(zhǔn)備這個(gè)兩個(gè)文件不是必須的。
但是,有了它們,用戶(hù)可以自己手動(dòng)安裝依賴(lài)包
pip install -r requirements.txt
有了它們,結(jié)合tox等工具,可以非常方便的加入自動(dòng)化測(cè)試。
4. 準(zhǔn)備一個(gè)項(xiàng)目的README.rst文件,前面也提到了它的格式要求,第一次發(fā)包,可以直接copy別人的格式,這東西熟能生巧,多寫(xiě)就會(huì)了。
5. 準(zhǔn)備好上面的步驟,一個(gè)包就基本完整了,剩下的就是打包了(cd到包的根目錄):
可以使用下面命令打包一個(gè)源代碼的包:
python setup.py sdist build
這樣在當(dāng)前目錄的dist文件夾下,就會(huì)多出一個(gè)以tar.gz結(jié)尾的包了:
也可以打包一個(gè)wheels格式的包,使用下面的命令搞定:
python setup.py bdist_wheel --universal
這樣會(huì)在dist文件夾下生成一個(gè)whl文件,
6. 上傳生成的包,可以使用setuptools,或者twine上傳,推薦使用twine上次,因?yàn)槭褂胹etuptools上傳時(shí),你的用戶(hù)名和密碼是明文或者未加密傳輸,安全起見(jiàn)還是使用twine吧
# 上傳source 包
python setup.py sdist upload
# 上傳pre-compiled包
python setup.py bdist_wheel upload
使用twine上傳,先安裝twine
sudo pip installtwine
twine upload dist/*
上次前都會(huì)提示你前面注冊(cè)的用戶(hù)名和密碼。一切搞定,你的包現(xiàn)在可以通過(guò)pip在任何地方安裝了。
后續(xù)
其實(shí)對(duì)于一個(gè)包,你要長(zhǎng)久維護(hù),自動(dòng)測(cè)試肯定要加入,后面有時(shí)間再分享下如何使用tox的使用和與第三方CI的集成。
引用鏈接:
pypi詳細(xì)教程:?https://packaging.python.org/distributing
總結(jié)
以上是生活随笔為你收集整理的pypi.python.org_在Pypi上发布自己的Python包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 记录一种多个按钮中每次只能选中一个的实现
- 下一篇: AVFoundation – AVMet