如何發佈公開 pip 包

需求

  1. pypi.org帳號,主郵箱須要驗證經過。
  2. testing.pypi.org帳號,注意:測試環境的pypi 帳號 和正式環境的 pypi 帳號不互通,爲了社區的穩定及繁榮發展,請務必先上測試環境確認無誤後再發到正式環境。
  3. 有必定的 python 基礎,瞭解 Python2和共存時該如何使用 pip 安裝第三方包。

開始

儘可能把本身的包單獨放到一個項目內,把本身寫好的包在 github 上新建一個項目。python

  1. github上建一個項目,項目名稱儘可能和你的包名稱一致。git

  2. 把本身的包放到 本地環境,建立一個虛擬環境,方便你freeze 你的依賴包,並選擇一個開源協議, 上傳到 gitgithub

  3. 編寫 REANDME.md, 讓其餘人知道你的工具包如何使用。shell

  4. 編寫 setup.py, 即編譯你的工具包。bash

    setup.py是setuptools的構建腳本。它告訴setuptools你的包(例如名稱和版本)以及要包含的代碼文件。markdown

    打開setup.py並輸入如下內容。更新軟件包名稱以包含您的用戶名(例如,example-pkg-theacodes),這可確保您擁有惟一的軟件包名稱,而且您的軟件包與本教程後其餘人上傳的軟件包不會發生衝突。ide

    import setuptools
    
    with open("README.md", "r") as fh:
        long_description = fh.read()
    
    setuptools.setup(
        name="example-pkg-your-username",                  # 包名稱
        version="0.0.1",                                   # 包版本
        author="Example Author",                           # 做者
        license='MIT',                                     # 協議簡寫
        author_email="author@example.com",                 # 做者郵箱
        description="A small example package",             # 工具包簡單描述
        long_description=long_description,                 # readme 部分
        long_description_content_type="text/markdown",     # readme 文件類型
        install_requires=[                                 # 工具包的依賴包
        'certifi>=2019.6.16',
        'chardet>=3.0.4',
        'decorator>=4.4.0',
        'idna>=2.8',
        'requests>=2.22.0',
        'retry>=0.9.2',
        'urllib3>=1.25.3',
        'xmltodict>=0.12.0'
        ],
        url="https://github.com/pypa/sampleproject",       # 包的開源連接
        packages=setuptools.find_packages(),               # 不用動,會自動發現
        classifiers=[                                      # 給出了指數和點子你的包一些額外的元數據
            "Programming Language :: Python :: 3",
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
        ],
    )
    複製代碼
    • name是包的分發名稱。只要包含字母,數字_和,就能夠是任何名稱-。它也不能在pypi.org上使用。請務必使用您的用戶名更新此內容,由於這樣可確保您不會嘗試上傳與上傳程序包時已存在的程序包相同的程序包。
    • version 是包版本看 PEP 440有關版本的更多詳細信息。
    • author並author_email用於識別包的做者。
    • description 是一個簡短的,一句話的包的總結。
    • long_description是包的詳細說明。這顯示在Python Package Index的包詳細信息包中。在這種狀況下,加載長描述README.md是一種常見模式。
    • long_description_content_type告訴索引什麼類型的標記用於長描述。在這種狀況下,它是Markdown。
    • url是項目主頁的URL。對於許多項目,這只是一個指向GitHub,GitLab,Bitbucket或相似代碼託管服務的連接。
    • packages是應包含在分發包中的全部Python 導入包的列表。咱們可使用 自動發現全部包和子包,而不是手動列出每一個包。在這種狀況下,包列表將是example_pkg,由於它是惟一存在的包。find_packages()
    • classifiers給出了指數和點子你的包一些額外的元數據。在這種狀況下,該軟件包僅與Python 3兼容,根據MIT許可證進行許可,而且與操做系統無關。您應始終至少包含您的軟件包所使用的Python版本,軟件包可用的許可證以及您的軟件包將使用的操做系統。有關分類器的完整列表,請參閱 pypi.org/classifiers…
  5. 生成分發檔案工具

    是爲包生成分發包。這些是上傳到包索引的檔案,能夠經過pip安裝。測試

    • 確認 setuptoolswhell 爲最新版 【重要】: 若是不爲最新版可能致使沒法編譯。
    pip install --user --upgrade setuptools wheel   
    # 若是您在安裝它們時遇到問題,請參閱 [安裝包教程](https://github.com/pypa/packaging-problems/issues/new?title=Trouble+following+packaging+libraries+tutorial) 
    複製代碼
    • 從setup.py位於的同一目錄運行此命令:
    python3 setup.py sdist bdist_wheel
    複製代碼
  6. 上傳編譯包到測試環境ui

    Test PyPI是用於測試和實驗的包索引的單獨實例。這對於像咱們不必定想要上傳到真實索引的本教程這樣的東西很棒。要註冊賬戶,請訪問 test.pypi.org/account/reg… PyPI的更多詳細信息,請參閱 使用TestPyPI

    安裝 twine 上傳編譯包

    pip install --user --upgrade twine
    複製代碼

    使用 twine 上傳編譯包

    python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
    複製代碼

    到如今已經上傳完成了,你能夠到你的包,並安裝測試。 test.pypi.org

  7. 上傳編譯包到正式環境

    確認包無缺,能夠正常工做,上傳到正式環境。

    使用 twine 上傳編譯包

    python -m twine upload dist/*
    複製代碼
  8. 測試正式環境的包

參考連接

打包Python項目

使用TestPyPI

導入包

相關文章
相關標籤/搜索