如何將自己的Python包發(fā)布到PyPI

以前寫過一篇類似的文章: 如何打包自己的項(xiàng)目并且發(fā)布到pypi上,不過由于PyPI進(jìn)行了一些更新,因此舊方法不大適用了。趁端午有時(shí)間,想把haipproxy的客戶端發(fā)布到PyPI,以改進(jìn)用戶體驗(yàn),因此這次又嘗試了如何將Python包發(fā)布到新版本的PyPI上。

編寫setup.py

haipproxy為例,它的setup.py如下

from os import path as os_path
from setuptools import setup

import haipproxy

this_directory = os_path.abspath(os_path.dirname(__file__))

# 讀取文件內(nèi)容
def read_file(filename):
    with open(os_path.join(this_directory, filename), encoding='utf-8') as f:
        long_description = f.read()
    return long_description

# 獲取依賴
def read_requirements(filename):
    return [line.strip() for line in read_file(filename).splitlines()
            if not line.startswith('#')]

setup(
    name='haipproxy',  # 包名
    python_requires='>=3.4.0', # python環(huán)境
    version=haipproxy.__version__, # 包的版本
    description="High aviariable proxy pool client for crawlers.",  # 包簡介,顯示在PyPI上
    long_description=read_file('README.md'), # 讀取的Readme文檔內(nèi)容
    long_description_content_type="text/markdown",  # 指定包文檔格式為markdown
    author="Resolvewang", # 作者相關(guān)信息
    author_email='resolvewang@foxmail.com',
    url='https://github.com/SpiderClub/haipproxy',
    # 指定包信息,還可以用find_packages()函數(shù)
    packages=[
        'haipproxy',
        'haipproxy.client',
        'haipproxy.utils'
    ],
    install_requires=read_requirements('requirements.txt'),  # 指定需要安裝的依賴
    include_package_data=True,
    license="MIT",
    keywords=['proxy', 'client', 'haipproxy'],
    classifiers=[
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Natural Language :: English',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
    ],
)

除了setup.py,還有個(gè)和包有關(guān)的文件為setup.cfg,由于對(duì)其還未使用需求,所以這里也不展開講了。

使用Markdown文件作為項(xiàng)目的Readme

新版PyPI一個(gè)令人欣喜的功能是提供了Markdown文檔的支持。需要做下面的工作以支持Markdown文件

  1. setup.py 中添加添加新參數(shù),內(nèi)容如下
    long_description=read_file('README.md'),
    long_description_content_type="text/markdown",  # 新參數(shù)

2.更新 setuptools,因?yàn)?code>setuptools>= 38.6.0 才能使用新的元數(shù)據(jù)生成發(fā)布包。

pip install -U setuptools

3.用 twine上傳分發(fā)包,并且只有 twine> = 1.11.0 才能將元數(shù)據(jù)正確發(fā)送到 Pypi上

pip install -U twine

打包項(xiàng)目并上傳

1.運(yùn)行python setup.py check檢查setup.py是否有錯(cuò)誤,如果沒報(bào)錯(cuò)誤,則進(jìn)行下一步

  1. 注冊(cè)PyPI帳號(hào),注冊(cè)完成之后,在本機(jī)(Linux或者M(jìn)ac)創(chuàng)建~/.pypirc文件,文件內(nèi)容如下
[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = xxxx  # pypi登錄用戶名
password = xxxx  # pypi登錄密碼

3.創(chuàng)建MANIFEST.in文件,它的作用在于包含一些和包同級(jí)的文件,比如我的包結(jié)構(gòu)為

-- haipproxy
  -- haiproxy
      -- __init__.py
  -- README.md
  -- requirements.txt
  -- LICENSE

如果不通過MANIFEST.inrequirements.txt打包到待發(fā)布的包中,那么安裝的時(shí)候就可能出現(xiàn)FileNotFoundError,因此需要將該文件包含到需要發(fā)布的包中

include *.in
include *.ini
include *.rst
include *.txt
include LICENSE

global-exclude __pycache__ *.py[cod]
global-exclude *.so *.dylib

4.生成源碼分發(fā)包

python setup.py sdist

運(yùn)行該命令之后,會(huì)生成一個(gè)haipproxy.egg-info文件夾,可以查看其中的SOURCES.txt文件,以確定是否所有需要的內(nèi)容都已經(jīng)被包括在待發(fā)布的包中

5.上傳分發(fā)包

twine upload dist/* # 也可以單獨(dú)指定 dist 文件夾中的某個(gè)版本的發(fā)布包

上傳成功之后,便可以使用pip install package_name來安裝和使用發(fā)布的包了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,131評(píng)論 1 3
  • 本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或者翻譯。 本站文章歡迎各種形式的轉(zhuǎn)載,但請(qǐng)18歲以上的轉(zhuǎn)載者注明文章出處,尊重...
    Michael_林閱讀 775評(píng)論 1 1
  • 這里就不講三方包和模塊的概念以及什么發(fā)展史了,直接進(jìn)主題; 安裝方式:分為本地安裝和遠(yuǎn)程安裝 本地安裝: 1.對(duì)于...
    hello_我的哥閱讀 2,348評(píng)論 2 4
  • 養(yǎng)車入口技術(shù)支持電話:
    米匠閱讀 751評(píng)論 2 0
  • 春季養(yǎng)生應(yīng)遵循養(yǎng)陰防風(fēng)的原則。春季,人體陽氣上升,因此要注意保護(hù)體內(nèi)的陽氣。 中醫(yī)養(yǎng)生學(xué)理論認(rèn)為“春與肝相應(yīng)”...
    慶文微生活閱讀 482評(píng)論 1 0

友情鏈接更多精彩內(nèi)容