如何共享您的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='the.gigi@gmail.com',

      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上传了所有发行格式,包括来源和版权。

Twine uploaded all the distribution formats

测试您的包裹

将软件包安装在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 预构建的Python软件包共享索引可以减少索引时间和CPU负载。这是因为预构建的软件包已经含了索引信息,可以直接使用,而不需要重新构建索引。此外,共享索引可以避免重复索引相同的内容,从而减少CPU负载。这对于需要频繁更新索引的应用程序来说尤为重要,可以提高应用程序的性能和响应速度。 ### 回答2: 索引是对文本数据进行快速搜索和排序的重要操作,但随着数据量的不断增大,索引的建立和更新时间以及 CPU 负载也越来越高,给系统带来了不小的压力。为了解决这一问题,可以使用预构建的 Python 软件包共享索引来减少索引时间和 CPU 负载。 预构建的 Python 软件包共享索引指的是使用现成的索引来进行搜索和排序,避免了每次都需要重新建立索引的时间和 CPU 负载。这种方法通常需要使用全文检索引擎,如 Elasticsearch、Solr 和 Whoosh 等。这些引擎提供了高效的搜索和排序功能,可以处理海量的文本数据。 使用预构建的 Python 软件包共享索引的好处在于: 1. 减少索引时间:利用现成的索引,避免重复建立索引的时间和 CPU 负载,能够大大减少索引时间,提高系统的响应速度。 2. 减轻 CPU 负载:由于索引已经建立完成,搜索和排序操作不再需要占用过多的 CPU 资源,能够减轻系统的负载。 3. 提高搜索效率:使用全文检索引擎可以提供更精确的搜索结果和更高的搜索效率,从而提高系统的性能和用户体验。 总之,使用预构建的 Python 软件包共享索引可以大大减少索引时间和 CPU 负载,提高系统的响应速度和用户体验。因此,对于需要进行文本搜索和排序的应用程序来说,这是一个非常值得采用的优化策略。 ### 回答3: 使用预构建的Python软件包共享索引可以大大减少索引时间和CPU负载。这是因为预构建的Python软件包已经预设了一些常见的数据索引模板,这些模板已经含了大量的数据库索引和文档信息,因此在使用预构建软件包共享索引的时候,我们可以省去大量的索引操作和数据加载,减少了索引时间,也减轻了系统负载。 实际上,预构建的Python软件包共享索引的原理就是将同一个数据源的所有数据存储在同一个索引文件中,这个文件含了所有数据的信息,括各种元数据、文档搜索词、文档来源、文档编码、所属索引编号等信息。同时,这个索引文件还预先设置了各种数据查询模板、数据检索算法等,以减少索引查询时间和CPU负载。 使用预构建的Python软件包共享索引既可以降低硬件成本,同时也可以提高应用程序的性能和安全性,它为用户提供了一种方便快捷、高效可靠的数据检索方式。 在使用预构建Python软件包共享索引的时候,我们需要注意以下几点: 首先,需要保证所使用的软件包完全符合我们的需求,以及数据源的特点。 其次,需要保证数据源的完整性和安全性,避免数据泄露或系统崩溃等不良后果。 最后,我们需要不断地对预构建Python软件包共享索引进行维护和监控,定期更新数据源和索引文件,以保证索引的时效性和精确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值