pypi 打包分发

打包Python项目

本教程将指导您如何打包一个简单的Python项目。它将向您展现如何添加必要的文件和结构来建立包,如何构建包以及如何将其上载到Python包索引。html

一个简单的项目

本教程使用一个名为的简单项目example_pkg若是您不熟悉Python的模块和导入包,请花几分钟时间阅读包含文件包和模块Python文档python

要在本地建立此项目,请建立如下文件结构:git

/example_pkg
  /example_pkg
    __init__.py

建立此结构后,您将须要在顶级文件夹中运行本教程中的全部命令 - 因此必定要确保cd example_pkggithub

您还应该编辑example_pkg/__init__.py并在其中放入如下代码:bash

name = "example_pkg" 

这只是为了您能够在本教程后面验证它是否正确安装。markdown

建立包文件

如今,您将建立一些文件来打包此项目并准备分发。建立下面列出的新文件 - 您将在如下步骤中向其添加内容。ide

/example_pkg
  /example_pkg
    __init__.py
  setup.py
  LICENSE
  README.md

建立的setup.py 

setup.pysetuptools的构建脚本它告诉setuptools你的包(例如名称和版本)以及要包含的代码文件。测试

打开setup.py并输入如下内容,您能够根据须要个性化值:ui

import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="example_pkg", version="0.0.1", author="Example Author", author_email="author@example.com", description="A small example package", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/pypa/sampleproject", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], ) 

setup()有几个论点。此示例包使用相对最小的集:this

  • name是您的包的名称。只要包含字母,数字_,就能够是任何名称-它也不能在pypi.org上使用。
  • version 是包版本看 PEP 440有关版本的更多详细信息。
  • authorauthor_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版本,软件包可用的许可证以及您的软件包将使用的操做系统。有关分类器的完整列表,请参阅https://pypi.org/classifiers/

除了这里提到的还有不少。有关详细信息,请参阅 打包和分发项目

建立README.md 

打开README.md并输入如下内容。若是您愿意,能够自定义此项。

# Example Package

This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/) to write your content. 

建立许可证

上传到Python Package Index的每一个包都包含许可证,这一点很重要。这告诉用户安装您的软件包可使用您的软件包的条款。有关选择许可证的帮助,请参阅 https://choosealicense.com/选择许可证后,打开 LICENSE并输入许可证文本。例如,若是您选择了MIT许可证:

Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

生成分发档案

下一步是为成分发包这些是上传到包索引的档案,能够经过pip安装

确保您拥有setuptoolswheel 安装了最新版本

python3 -m pip install --user --upgrade setuptools wheel

小费

 

若是您在安装这些软件时遇到问题,请参阅 安装软件包教程

如今从setup.py位于的同一目录运行此命令

python3 setup.py sdist bdist_wheel

此命令应输出大量文本,一旦完成,应在dist目录中生成两个文件

dist/
  example_pkg-0.0.1-py3-none-any.whl
  example_pkg-0.0.1.tar.gz

注意

 

若是您遇到麻烦,请复制输出并提出有关包装问题的问题,咱们会尽力为您提供帮助!

tar.gz文件是源存档,而该.whl文件是 构建的分发较新的pip版本优先安装构建的发行版,但若是须要,将回退到源代码存档。您应该始终上传源存档并为项目兼容的平台提供构建的存档。在这种状况下,咱们的示例包在任何平台上都与Python兼容,所以只须要一个构建的发行版。

上传分发档案

最后,是时候将您的包上传到Python Package Index了!

您须要作的第一件事是在Test PyPI上注册一个账户Test PyPI是用于测试和实验的包索引的单独实例。这对于像咱们不必定想要上传到真实索引的本教程那样很棒。要注册账户,请访问 https://test.pypi.org/account/register/并完成该页面上的步骤。在您上传任何软件包以前,您还须要验证您的电子邮件地址。有关Test PyPI的更多详细信息,请参阅 使用TestPyPI

如今您已注册,您可使用twine上传分发包。你须要安装Twine:

python3 -m pip install --user --upgrade twine

安装完成后,运行Twine上传全部存档dist

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

系统将提示您输入使用Test PyPI注册的用户名和密码。命令完成后,您应该看到与此相似的输出:

Uploading distributions to https://test.pypi.org/legacy/
Enter your username: [your username] Enter your password: Uploading example_pkg-0.0.1-py3-none-any.whl 100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s] Uploading example_pkg-0.0.1.tar.gz 100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s] 

注意

 

若是您收到错误消息,则须要为您的包选择一个惟一的名称。一个不错的选择 更新参数 ,删除文件夹,而后 从新生成存档The user '[your username]' isn't allowed to upload to project 'example-pkg'example_pkg_your_usernamenamesetup.pydist

上传后,您的包应该能够在TestPyPI上查看,例如,https: //test.pypi.org/project/example-pkg

安装新上传的软件包

您可使用pip来安装包并验证它是否有效。建立一个新的virtualenv(请参阅安装包以获取详细说明)并从TestPyPI安装包:

python3 -m pip install --index-url https://test.pypi.org/simple/ example_pkg

注意

 

若是在预览步骤中使用了不一样的包名称,请example_pkg在上面的命令中使用您的包名称替换 

pip应该从Test PyPI安装包,输出应该以下所示:

Collecting example_pkg
  Downloading https://test-files.pythonhosted.org/packages/.../example_pkg-0.0.1-py3-none-any.whl
Installing collected packages: example-pkg
Successfully installed example-pkg-0.0.1

您能够经过导入模块并引用先前name放置属性来测试它是否已正确安装__init__.py

运行Python解释器(确保你仍然在你的virtualenv中):

python

而后导入模块并打印出name属性。不管您给出的分发包名称是什么,这都应该是相同的 ,setup.py由于您的导入包example_pkg

>>>
>>> import example_pkg >>> example_pkg.name 'example_pkg' 

后续步骤

恭喜,您已经打包并分发了一个Python项目! ✨🍰✨

请记住,本教程向您展现了如何将软件包上传到Test PyPI,而测试PyPI是短暂的。偶尔删除包和账户并不罕见。若是您想将软件包上传到真正的Python软件包索引,能够经过在https://pypi.org上注册账户并按照相同的说明进行上传,可是,使用上传软件包并输入您的账户凭据在真正的PyPI上注册。您可使用真正的PyPI安装包 twineupload dist/*pip install your-package

相关文章
相关标签/搜索