在Pypi上發布自己的Python包



使用Python編程的都知道,Python的包安裝非常的方便,一般都是可以pip來安裝搞定:

sudo pip install <package name>

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


 

最近因為項目上的需要,發布了一個自己的pypi Python包,這里我大致分享如何發布自己的Pypi包一般過程。

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

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項目首頁。

  • 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的格式個上面一樣。

准備這個兩個文件不是必須的。

但是,有了它們,用戶可以自己手動安裝依賴包

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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM