python_模块

包,Package,是一种Python模块的集合,从文件组织形式上看,包就是一个文件夹,里面放着各种模块(.py文件),也可以有子文件夹(子包)。包名构建了一个Python模块的命名空间。比如,模块名A.B表示A包中名为B的子模块。这种使用加点的模块名可以让你写的软件包里面的模块名称和其它软件包里面的模块名称一样,但又不相互冲突。

关键术语

  • Python Packaging Index 是一个开源许可的软件包公共存储库,可供所有 Python 用户使用。

  • Python Packaging Authority 是负责标准打包工具以及相关元数据和文件格式标准维护与改进的开发人员和文档作者团队。 他们基于 GitHub 和 Bitbucket 这两个平台维护着各种工具、文档和问题追踪系统。

  • distutils 是1998年首次添加到Python标准库的原始构建和分发系统。虽然直接使用 distutils 正在逐步淘汰,但它仍然为当前的打包和分发基础架构奠定了基础它不仅仍然是标准库的一部分,而且它的名称还以其他方式存在(例如用于协调Python包装标准开发的邮件列表的名称)。

  • setuptools (在很大程序上)是作为 distutils 的取代者,于 2004 年首次发布。它对未经修改的 distutils 工具最重要的补充是能够声明对其他包的依赖。目前它被推荐用来替代 distutils,其更新更为频繁,在更为多样的 Python 版本之上为最新的包标准提供持续支持。

  • wheel (在此上下文中)是一个将 bdist_wheel 命令添加到 distutils/setuptools 的项目。这产生了一个跨平台的二进制打包格式(称为“轮子”或“轮子文件”,并在 PEP 427 中定义),它允许在系统上安装Python库,甚至包括二进制扩展的库,而不需在本地进行构建。

创建包文件

包的目录中必须包含一个__init__.py文件,它可以是空文件,也可以写包初始化相关的代码,或者定义__all__变量。

packaging_tutorial
├── LICENSE
├── README.md
├── example_pkg    #要创建的包,模块位于该文件夹下
│   └── __init__.py
├── setup.py
└── tests         #是单元测试文件的占位符。现在把它留空。

创建setup.py

setup.py是设置工具的生成脚本。它告诉设置工具有关您的包(如名称和版本)以及要包括的代码文件。

#setup.py
from setuptools import setup,find_packages
setup(
    name="example-pkg-YOUR-USERNAME-HERE",    # 包名称
    version="0.0.1",                          # 版本
    packages=find_packages(),      
)

setup()需要几个参数。此示例包使用相对最小的集:

  • name包的分发名称。

  • version是包版本,

  • author用于标识包的作者。

  • description是包的简短一句话摘要。

  • long_description是包的详细说明。这显示在 Python 包索引上的包详细信息包上。在这种情况下,将加载长描述,这是一个常见的模式。

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

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

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

创建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 包索引的每个包来说,包含许可证非常重要。这将告诉安装您的包的用户可以使用您的包的条款。有关挑选许可证的帮助,请参阅https://choosealicense.com/。选择许可证后,打开并输入许可证文本。例如,如果您选择了 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.

生成分发存档

标准库不包括支持现代Python打包标准的构建工具,因为核心开发团队已经发现,即使在旧版本的Python上,使用一致工作的标准工具也很重要。

可以通过在命令行调用 pip 模块来安装当前推荐的构建和分发工具:

python -m pip install setuptools wheel twine

请确保您安装了 最新版本和 :setuptoolswheel

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

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

python setup.py sdist bdist_wheel

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

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

上传分发存档

您需要做的第一件事是在 上注册帐户。测试 PyPI 是用于测试和试验的包索引的单独实例。它非常适合像本教程,我们不一定想上传到真正的索引的东西。要注册帐户,请转到https://test.pypi.org/account/register/并完成该页面上的步骤。在上传任何包裹之前,您还需要验证您的电子邮件地址。有关测试 PyPI 的更多详细信息,请参阅使用 TestPyPI

现在,您将创建一个 PyPI API令牌,以便能够安全地上传项目。

转到https://test.pypi.org/manage/account/#api-tokens创建新的 API 令牌;不要将其范围限制为特定项目,因为您正在创建新项目。

在复制并保存令牌之前,不要关闭该页面 - 您不会再看到该令牌。

注册后,可以使用twine 上载分发包。您需要安装 Twine:

python -m pip install --user --upgrade twine

安装后,运行 Twine 以上传以下下的所有存档:dist

python -m twine upload --repository testpypi dist/*

系统会提示您输入用户名和密码。对于用户名,请使用 。对于密码,请使用令牌值,包括前缀。__token__pypi-

命令完成后,您应该会看到类似于以下的输出:

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

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

安装新上传的包

您可以使用 pip安装包并验证其是否正常工作。

python -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-YOUR-USERNAME-HERE

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

本地安装

pip install example_pkg_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl

 案例:

 

from app import add,reduce
print(add.my_add(4,5))
print(reduce.my_red(6,5))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值