天天看點

如何共享您的Python軟體包

總覽

Python包是Python應用程式的建構塊。 它們封裝了一些連貫的功能,可以被許多應用程式和系統導入和使用。 但是首先,開發人員需要找到您的軟體包并能夠安裝它。 Python為軟體包提供了免費的公共存儲庫,這是共享Python軟體包的事實上的标準。 您也可以将私有軟體包存儲庫用于專有軟體包。

在本教程中,您将學習如何與社群共享您自己的軟體包。 如果您擁有專有軟體包,則隻​​需要在公司内部共享,您還将學到如何做。

有關背景,請參見如何使用Python程式包和如何編寫自己的Python程式包 。

什麼是PyPI?

PyPI代表Python包索引。 它是用于上傳軟體包的公共存儲庫。 Pip知道PyPI,可以從PyPI安裝和/或更新軟體包。 在Monty Python的著名素描之後,PyPI曾經被稱為“奶酪店”。 如果您聽到人們在Python包裝上下文中提到“奶酪店”,請不要驚慌。 隻是PyPI。

準備要上傳的軟體包

在上傳軟體包之前,您需要擁有一個軟體包。 我将使用在如何編寫自己的Python包一文中介紹的conman包。 由于PyPI包含成千上萬個軟體包,是以如果您希望人們找到它,能夠正确描述您的軟體包非常重要。 PyPI支援一組令人印象深刻的中繼資料标簽,以使人們找到适合該工作的軟體包。

setup.py檔案包含許多用于安裝軟體包的重要資訊。 但它也可以包含用于在PyPI上對軟體包進行分類的中繼資料。 使用多個中繼資料标簽對包進行分類。 其中一些是文本的,其中一些具有可能值的清單。 完整清單可在PyPI的“ 清單分類器”頁面上找到 。

讓我們向

setup.py

添加一些分類器。 無需增加版本号,因為它隻是中繼資料,并且代碼保持不變:

from setuptools import setup, find_packages



setup(name='conman',

      version='0.3',

      url='https://github.com/the-gigi/conman',

      license='MIT',

      author='Gigi Sayfan',

      author_email='[email protected]',

      description='Manage configuration files',

      classifiers=[

          'Development Status :: 3 - Alpha',

          'Intended Audience :: Developers',

          'Topic :: Software Development :: Libraries',

          'License :: OSI Approved :: MIT License',

          'Programming Language :: Python :: 2',

          'Programming Language :: Python :: 2.6',

          'Programming Language :: Python :: 2.7',

      ],

      packages=find_packages(exclude=['tests']),

      long_description=open('README.md').read(),

      zip_safe=False,

      setup_requires=['nose>=1.0'],

      test_suite='nose.collector')
           

建立一個帳戶

您需要在PyPI上建立一個帳戶才能上傳包。 填寫此表單 ,然後單擊驗證電子郵件中的URL來驗證您的身份。 現在,您需要在主目錄中建立一個

.pypyrc

檔案,其中将包含上傳軟體包所需的資訊。

[distutils]

index-servers=pypi



[pypi]

repository = https://pypi.python.org/pypi

username = the_gigi
           

您也可以添加密碼,但是如果您不小心遇到一些不良情況,這會更安全。 如果您上傳受歡迎的軟體包,這尤其重要,因為如果有人可以上傳或更新您的軟體包,則使用這些軟體包的所有人員都将受到攻擊。

測驗

如果您想測試軟體包注冊和上傳過程,而不必擔心釋出不完整的内容,則可以使用替代的PyPI測試站點 。 擴充〜/ .pypirc檔案,使其包含“ pypitest”部分。

[distutils]

index-servers=

    pypi

    pypitest



[pypitest]

repository = https://testpypi.python.org/pypi

username = the_gigi



[pypi]

repository = https://pypi.python.org/pypi

username = the_gigi
           

請記住,測試站點要定期清理,是以不要依賴它。 僅用于測試目的。

注冊您的包裹

如果這是軟體包的第一個版本,則需要在PyPI中注冊。 麻線有一個注冊指令,但我不知道如何使用它。 按照文檔進行操作會産生錯誤,并且檢查單元測試中是否存在麻線,沒有針對register指令的測試。 那好吧。 您也可以使用此表格手動上傳PKG-INFO檔案。 如果您使用的是Python 2.7.9+或Python 3.2+,則還可以使用python

setup.py register

安全地進行

setup.py register

讓我們在PyPI測試站點上注冊conman。 請注意

-r pypitest

,它基于

~/.pypirc

的部分将在測試站點中注冊。

python setup.py register -r pypitest

running register

running egg_info

writing conman.egg-info/PKG-INFO

writing top-level names to conman.egg-info/top_level.txt

writing dependency_links to conman.egg-info/dependency_links.txt

reading manifest file 'conman.egg-info/SOURCES.txt'

reading manifest template 'MANIFEST.in'

writing manifest file 'conman.egg-info/SOURCES.txt'

running check

Password:

Registering conman to https://testpypi.python.org/pypi

Server response (200): OK
           

纏繞

您可以使用

python setup.py upload

來上傳軟體包,但是它不安全,因為它以前一直通過HTTP發送使用者名和密碼,直到Python 2.7.9和Python 3.2。 Twine始終使用HTTPS,并具有其他優點,例如上傳預先建立的發行版,并且支援任何包裝格式,包括滾輪。 我将使用麻線進行實際上傳。

Twine不屬于标準庫,是以您需要安裝它:

pip install twine

上傳您的包裹

最後,是時候實際上傳軟體包了。

> twine upload -r pypitest -p ******* dist/*

Uploading distributions to https://testpypi.python.org/pypi

Uploading conman-0.3-py2-none-any.whl

Uploading conman-0.3-py2.py3-none-any.whl

Uploading conman-0.3.tar.gz
           

Twine上傳了所有發行格式,包括來源和版權。

如何共享您的Python軟體包

測試您的包裹

将軟體包安裝在PyPI上之後,您應該確定可以安裝它并且一切正常。 在這裡,我建立一個一次性的虛拟環境,從PyPI測試站點pip install conman,然後将其導入。 您可能需要對軟體包運作更全面的測試。

> mkvirtualenv test_conman_pypi

New python executable in test_conman_pypi/bin/python2.7

Also creating executable in test_conman_pypi/bin/python

Installing setuptools, pip...done.

Usage: source deactivate



removes the 'bin' directory of the environment activated with 'source

activate' from PATH.

(test_conman_pypi) > pip install -i https://testpypi.python.org/pypi conman

Downloading/unpacking conman

  Downloading conman-0.3-py2-none-any.whl

  Storing download in cache at /Users/gigi/.cache/pip/https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl

Installing collected packages: conman

Successfully installed conman

Cleaning up...

(test_conman_pypi) > python

Python 2.7.10 (default, Jun 10 2015, 19:43:32)

[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import conman

>>>
           

請注意,輪分布預設情況下已安裝。

版本控制

當您更新軟體包并上傳新版本時,請遵循明智的版本控制方案,這一點很重要。 如果無意的更新破壞了他們的代碼,人們會很不高興。 您的版本控制方案必須符合PEP-440 –版本辨別和依賴項規範 。

該規範允許選擇多種方案。 我建議使用流行的語義版本控制方案。 它幾乎是“ <major>。<minor>。<patch>”,與PEP-440的“ <major>。<minor>。<micro>”相對應。 請當心那些帶有連字元或加号的版本,這些版本與PEP-440不相容。

私人包裝倉庫

PyPI很棒,但有時您不想共享您的軟體包。 許多公司群組織的工程團隊使用Python,并且需要在它們之間共享軟體包,但不允許在PyPI上公開共享它們。 這不是問題。 您可以在您的控制下在私有軟體包存儲庫上共享軟體包。

請注意,有時您可能希望擁有一個私有軟體包存儲庫以控制您的第三方依賴項。 例如,包作者可以決定從PyPI删除包。 如果您的系統依賴于能夠從PyPI安裝此軟體包,則您會遇到麻煩。

德皮

Devpi (代表開發包索引)是公共PyPI伺服器的直接替代品。 它是開源的,并獲得了MIT的許可,是以您可以在防火牆内運作它。 Devpi非常強大,并具有許多功能使其可以用作最終的打包伺服器:

  • 快速PyPI鏡
  • 使用私有索引上載,測試和暫存
  • 索引繼承
  • Web界面和搜尋
  • 複寫
  • 導入/導出
  • 詹金斯整合

Devpi擁有出色的文檔和插件系統,并且正在與活躍的社群進行積極的開發。

結論

Python提供了一個完整的解決方案,用于托管您的軟體包并将其提供給其他Pythonista使用者。 有一個簡化的過程,借助工具來打包和上傳軟體包,并使它們易于查找和安裝。

如果您需要将事情保密,Devpi将在這裡為您提供成熟而強大的私有軟體包存儲庫。

翻譯自: https://code.tutsplus.com/tutorials/how-to-share-your-python-packages--cms-26114