在Pypi上發佈本身的Python包


使用Python編程的都知道,Python的包安裝很是的方便,通常都是能夠pip來安裝搞定:css

sudo pip install <package name>html

pip的安裝請移步:https://pip.pypa.io/en/stable/installing/python


 

最近由於項目上的須要,發佈了一個本身的pypi Python包,這裏我大體分享如何發佈本身的Pypi包通常過程。git

打包工做主要依賴python的一個叫setuptools的包來完成,在進行下面操做前請使用pip安裝它:github

sudo pip install setuptools

(這裏面我都是假設你已經準備好你的代碼,測試代碼以及目錄結構,加上我今天要分享的,就能夠組成一個完整的python包)

  • 1. 第一步,就是到pypi(https://pypi.python.org/pypi)上註冊本身的用戶, 點擊「Register」,填寫本身的用戶名,密碼,郵件地址後,就成功了。

記住本身的用戶名和密碼,後面上傳的時候要輸入的編程

  • 2. 準備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的語法能夠參考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

   個人long_description是同目錄下的README.rst的內容,同時這個README也是個人github項目首頁。bash

  • packages - 申明你的包裏面要包含的目錄,好比  ['mypackage', 'mypackage_test']  能夠是這種使用個人示例,讓setuptools自動決定要包含哪些包
  • install_requires - 申明依賴包,安裝包時pip會自動安裝:格式以下(我上面的setup.py沒有這個參數,由於我不依賴第三方包:)):
    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. 準備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-requirements.txt的內容,requirements.txt的格式個上面同樣。ide

準備這個兩個文件不是必須的。工具

可是,有了它們,用戶能夠本身手動安裝依賴包

pip install -r requirements.txt

有了它們,結合tox等工具,能夠很是方便的加入自動化測試。 

  • 4. 準備一個項目的README.rst文件,前面也提到了它的格式要求,第一次發包,能夠直接copy別人的格式,這東西熟能生巧,多寫就會了。

README的截圖就不放了,以避免廣告嫌疑。有興趣能夠到參考http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

 

  • 5. 準備好上面的步驟,一個包就基本完整了,剩下的就是打包了(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在任何地方安裝了。

 


 

後續

其實對於一個包,你要長久維護,自動測試確定要加入,後面有時間再分享下如何使用tox的使用和與第三方CI的集成。

 

引用連接:

pypi詳細教程: https://packaging.python.org/distributing 

相關文章
相關標籤/搜索