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

A simple project

本教程使用名为example_pkg的简单项目。如果您不熟悉Python的模块和导入包,请花几分钟时间阅读包含文件包和模块的Python文档。即使您已经有一个要打包的项目,我们仍然建议您按照本示例包使用此示例包,然后尝试使用自己的包。

要在本地创建此项目,请创建以下文件结构:

/packaging_tutorial

/example_pkg

__init__.py

创建此结构后,您将需要在顶级文件夹中运行本教程中的所有命令 - 因此请务必使用cd packaging_tutorial。

您还应该编辑example_pkg / __ init__.py并将以下代码放在其中:

name = "example_pkg"

这只是为了让您可以在本教程后面验证它是否正确安装,并且PyPI不会使用它。

Creating the package files

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

/packaging_tutorial

/example_pkg

__init__.py

setup.py

LICENSE

README.md

Creating setup.py

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

打开setup.py并输入以下内容。更新程序包名称以包含您的用户名(例如,example-pkg-theacodes),这可确保您拥有唯一的程序包名称,并且您的程序包不会与本教程后其他人上传的程序包冲突。

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",

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()需要几个参数。此示例包使用相对最小的集:

name是包的分发名称。只要包含字母,数字,_和 - ,这可以是任何名称。它也不能在pypi.org上使用。请务必使用您的用户名更新此内容,因为这样可确保您不会尝试上传与上传程序包时已存在的程序包相同的程序包。

版本是包版本,请参阅PEP 440以获取有关版本的更多详细信息。

author和author_email用于标识包的作者。

描述是包的简短的一句话摘要。

long_description是包的详细描述。这显示在Python Package Index的包详细信息包中。在这种情况下,从README.md加载长描述,这是一种常见模式。

long_description_content_type告诉索引用于长描述的标记类型。在这种情况下,它是Markdown。

url是项目主页的URL。对于许多项目,这只是一个指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。

packages是应包含在分发包中的所有Python导入包的列表。我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包。在这种情况下,包列表将是example_pkg,因为它是唯一存在的包。

分类器为索引提供一些关于包的其他元数据。在这种情况下,该软件包仅与Python 3兼容,根据MIT许可证进行许可,并且与操作系统无关。您应始终至少包含您的软件包所使用的Python版本,软件包可用的许可证以及您的软件包将使用的操作系统。有关分类器的完整列表,请参阅https://pypi.org/classifiers/。

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

Creating 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.

Creating a LICENSE

上传到Python Package Index的每个包都包含许可证,这一点很重要。这告诉用户安装您的软件包可以使用您的软件包的条款。有关选择许可证的帮助,请访问:http://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安装。

确保安装了最新版本的setuptools和wheel:

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

小费

如果您在安装它们时遇到问题,请参阅安装包教程。

现在从setup.py所在的同一目录运行此命令:

python3 setup.py sdist bdist_wheel

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

dist/

example_pkg_your_username-0.0.1-py3-none-any.whl

example_pkg_your_username-0.0.1.tar.gz

Note

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

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

Uploading the distribution archives

最后,是时候将您的包上传到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下的所有档案:

python3 -m 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_your_username-0.0.1-py3-none-any.whl

100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s]

Uploading example_pkg_your_username-0.0.1.tar.gz

100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s]

上传后,您的包应该可以在TestPyPI上查看,例如

Installing your newly uploaded package

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

python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-your-username

Make sure to specify your username in the package name

确保在包名中指定您的用户名!

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

Collecting example-pkg-your-username

Downloading https://test-files.pythonhosted.org/packages/.../example-pkg-your-username-0.0.1-py3-none-any.whl

Installing collected packages: example-pkg-your-username

Successfully installed example-pkg-your-username-0.0.1

Note

此示例使用--index-url标志指定TestPyPI而不是实时PyPI。另外,它指定--no-deps。由于TestPyPI与实时PyPI没有相同的包,因此尝试安装依赖项可能会失败或安装意外的事情。虽然我们的示例包没有任何依赖关系,但在使用TestPyPI时避免安装依赖项是一种很好的做法。

您可以通过导入模块并引用之前放在__init__.py中的name属性来测试它是否已正确安装。

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

python

然后导入模块并打印出name属性。无论您在setup.py中给出的分发包名称是什么(在本例中为example-pkg-your-username),这都应该是相同的,因为您的import包是example_pkg。

>>>

>>> import example_pkg

>>> example_pkg.name

'example_pkg'

Next steps

Congratulations, you’ve packaged and distributed a Python project! ✨ � ✨

请记住,本教程向您展示了如何将程序包上传到Test PyPI,它不是永久存储。测试系统偶尔会删除软件包和帐户。最好使用Test PyPI进行测试和实验,如本教程。

当您准备将真实包上传到Python包索引时,您可以像在本教程中那样执行相同操作,但具有以下重要差异:

为您的包装选择一个令人难忘的独特名称。您不必像在教程中那样附加用户名。

在https://pypi.org上注册一个帐户 - 请注意,这些是两个独立的服务器,并且测试服务器的登录详细信息不与主服务器共享。

使用twine upload dist / *上传您的包并输入您在真实PyPI上注册的帐户的凭据。

使用pip install [your-package]从真实的PyPI安装包。

在这一点上,如果你想关于包装的Python库,你可以做以下事情:

阅读有关使用setuptools在打包和分发项目中打包库的更多信息。

阅读包装二进制扩展。

考虑诸如flit,hatch和poetry之类的setuptools的替代方案。

python怎么安装包-如何给自己的Python项目制作安装包相关推荐

  1. 【Python入门】你值得拥有的这八个实用工具安装包与实战项目

    1.推荐3个画图工具:几个常用的画图工具,这类工具可以帮助理清楚思路,像学习框架也可以用这些做出来. 2.推荐5个实用的编辑工具:工欲善其事必先利其器. 3.推荐4个优秀的实战项目:内功修炼得好,写代 ...

  2. python制作安装包(setup.py)

    1.制作setup.py from distutils.core import setupsetup(name='Myblog',version='1.0',description='My Blog ...

  3. python制作安装包_如何制作python安装模块(setup.py)

    Python模块的安装方法: 1. 单文件模块:直接把文件拷贝到$python_dir/lib 2. 多文件模块,带setup.py:python setup.py install 3. egg文件, ...

  4. python制作安装包_Python简单安装包制作

    Python 简单安装包制作 Python egg制作(安装出问题) 项目目录下创建 setup.py 文件, 目录与内容如下举例 ~/vomm$ tree . ├── LICENSE ├── MAN ...

  5. linux下python安装包_Linux服务器中安装python包管理工具pip

    pip是python的包管理工具,python的强大之处除了在于语法的简练,还有就是对众多的库支持了. 1.下载pip包管理工具 链接地址:https://pypi.python.org/pypi/p ...

  6. vs2005制作安装包(自动安装.net framework 2.0)(小寿原创)

    vs2005制作安装包(自动安装.net framework 2.0)(小寿原创) 新建项目-> 其他项目类型->安装和部署->安装向导! 安装向导会提示你添加要安装的文件,这时你可 ...

  7. VS2008制作安装包

    图文详细地址:http://www.itwis.com/html/net/kaifagongju/20090218/3387.html VS2008制作安装包 安装与部署 2010-03-13 14: ...

  8. Debian、Ubuntu源码编译制作安装包(二)

    在<Debian.Ubuntu源码编译制作安装包(一)>文章中描述了dpkg基本制作安装包过程,本篇文章描述如何增加patch及解决出错问题. 章节预览: 5. 增加patch 6. 修改 ...

  9. Debian、Ubuntu源码编译制作安装包(一)

    Debian.Ubuntu系列linux操作系统制作安装包相较于CentOS更简便一些,如"dpkg -b"指令即可重新打包.如果需要源码级制作安装包则更困难一些,接下来,我们逐步 ...

最新文章

  1. NLP | 医学AI又一突破,微软开源生物医学NLP基准:BLURB
  2. oracle10.2.0.5漏洞,Oracle 10.2.0.5 opatch报错
  3. OpenCV学习笔记五-图像混合
  4. 导出一条数据_来自小师弟的灵魂拷问之数据泵导出丢失的那些数据量去哪了?...
  5. HDU1878 欧拉回路【并查集】
  6. Java的环境变量配置
  7. autojs之快捷键
  8. UBNT rocket M5 无线设置的有关笔记
  9. 南航计算机学院物联网,南航*物联网
  10. mysql 有没有minus_MySQL实现差集(Minus)和交集(Intersect)
  11. Set Scrolling Pictrues in the WebPage
  12. TortoiseSVN使用简介
  13. 程序猿生存指南-11 入职朗云
  14. 生产环境服务端报错:阿里云IOT连接中断
  15. 鸿蒙操作系统细节曝光,华为鸿蒙系统曝光细节,不像安卓也不像iOS,确认是华为自研!...
  16. html表格table表头和首列固定
  17. dnspod java_使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法
  18. 超过百万的数组——解决方法
  19. 每日启程——2019.12.13(古人学问无遗力,少壮工夫老始成)
  20. 微信小程序iconfont的图标引入

热门文章

  1. 5.springMVC数据回显(就是后台向页面传参的过程)
  2. mysql select 报错
  3. js数组去重的四种方法
  4. 6月16号=》156页-160页
  5. [转]Zend Studio 9正式版激活破解注册…
  6. Jquery背景图片的预加载
  7. 以下用于数据存储领域的python第三方库是-『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...
  8. 下列关于python的说法中、正确的是-以下关于 Python版本的说法中,哪个是正确的?...
  9. 学python用什么教材-金融学专业学python用什么教材或课外资料比较好?
  10. python找工作难吗-为什么我不建议你通过 Python 去找工作?