柳市做网站的公司/互联网营销是什么
打包Python项目
本教程将指导您如何打包一个简单的Python项目。它将 向您展示如何添加必要的文件和结构来创建包,如何 构建包,以及如何将其上传到Python包索引(PyPI)。
尖端
如果您在运行本教程中的命令时遇到问题,请复制命令 及其输出,然后在packaging-problems存储库上打开一个issue, GitHub.我们会尽力帮助你!
有些命令需要较新版本的pip,因此, 确保您安装了最新版本:
py -m pip install --upgrade pip
一个简单的项目
本教程使用一个名为 example_package_YOUR_USERNAME_HERE
.如果您的用户名是me
,则 包将是example_package_me
;这确保您有一个唯一的 与其他人上传的软件包不冲突的软件包名称 遵循本教程。我们建议按照本教程的原样使用此 在打包你自己的项目之前。
在本地创建以下文件结构:
packaging_tutorial/ └── src/└── example_package_YOUR_USERNAME_HERE/├── __init__.py└── example.py
包含Python文件的目录应该与项目名称匹配。这 简化了配置,并且对于安装软件包的用户来说更加明显。
__init__.py
建议将目录作为常规包导入, 即使像我们在本教程中的情况那样,该文件是空的[1]。
example.py
是包中的一个模块的示例, 包含逻辑(函数、类、常量等)你的包裹。 打开该文件并输入以下内容:
def add_one(number):return number + 1
如果你不熟悉Python 导入软件包,请花几分钟时间阅读 Python包和模块的文档。
创建此结构后,您需要运行此 packaging_tutorial
目录中的教程。
创建包文件
现在将添加用于准备项目以进行分发的文件。 完成后,项目结构将如下所示:
packaging_tutorial/ ├── LICENSE ├── pyproject.toml ├── README.md ├── src/ │ └── example_package_YOUR_USERNAME_HERE/ │ ├── __init__.py │ └── example.py └── tests/
创建测试目录
tests/
是测试文件的占位符。先把它空着。
选择构建后端
像pip和build这样的工具实际上并不转换你的源代码 进入一个分发包(像一个轮子); 该作业由构建后端执行。构建后端确定如何 您的项目将指定其配置,包括元数据(信息 例如,PyPI上显示的名称和标记) 和输入文件。构建后端具有不同级别的功能,例如 是否支持构建扩展模块,以及 你应该选择一个适合你的需要和喜好。
您可以从许多后端中进行选择;本教程默认使用Hatchling,但它与Setuptools的工作方式相同, Flit、PDM和其他支持[project]
元数据表。
注意
一些构建后端是提供命令行的大型工具的一部分 具有项目初始化和版本等附加功能的接口 管理,以及构建,上传和安装软件包。这 教程使用独立工作的单一用途工具。
pyproject.toml
告诉构建前端工具,如pip和 构建用于项目的后端。下面是一些 常见构建后端的示例,但请检查后端自己的文档 的双曲余切值。
hatchling
[build-system] requires = ["hatchling"] build-backend = "hatchling.build"
requires
键是构建包所需的包列表。 前端应该在构建包时自动安装它们。 前端通常在隔离的环境中运行构建,因此忽略依赖项 可能会导致构建时错误。 这应该总是包括你的后端的包,并可能有其他的构建时间 个依赖项
build-backend
键是前端将使用的Python对象的名称 来执行构建。
这两个值都将由构建的文档提供 后端,或由其命令行界面生成。应该没有必要 您可以自定义这些设置。
构建工具的其他配置将在tool
部分中 或者在构建工具定义的特殊文件中。为 例如,当使用pyproject.toml
作为构建后端时, 可以添加到setuptools
或setup.py
文件中,并指定 setup.cfg
在你的构建中允许工具定位和使用这些 的自动
配置元数据
打开pyproject.toml
,输入以下内容。更改name
以包含您的用户名;这可确保您拥有唯一的 与其他人上传的软件包不冲突的软件包名称 遵循本教程。
[project] name = "example_package_YOUR_USERNAME_HERE" version = "0.0.1" authors = [{ name="Example Author", email="author@example.com" }, ] description = "A small example package" readme = "README.md" requires-python = ">=3.8" classifiers = ["Programming Language :: Python :: 3","License :: OSI Approved :: MIT License","Operating System :: OS Independent", ][project.urls] Homepage = "https://github.com/pypa/sampleproject" Issues = "https://github.com/pypa/sampleproject/issues"
-
name
是您的软件包的分发名称。它可以是任何名称, 只要它只包含字母、数字、.
、_
和-
。它还 不能在PyPI上使用。请务必更新此与您的 本教程的用户名,因为这可以确保您不会尝试上传 与已存在的包同名的包。 -
version
是包的版本号。(Some构建后端允许它成为 以其他方式指定,例如从文件或Git标签。 -
authors
用于标识包的作者;您指定一个名称 每个作者的电子邮件。您也可以在同一个列表中列出maintainers
格式. -
description
是一个简短的,一句话的总结包。 -
readme
是一个文件的路径,该文件包含 包.这显示在PyPI上的包详细信息页面上。 在这种情况下,描述从README.md
加载(这是一个 共同模式)。中还描述了一种更高级的表格形式, pyproject.toml guide. -
requires-python
给出了您的 项目像pip这样的安装程序将通过旧版本的 包,直到找到一个具有匹配Python版本的包。 -
classifiers
给出索引和pip一些额外的元数据 关于你的包裹在这种情况下,该包仅与Python兼容 3,根据MIT许可证授权,并且独立于操作系统。你应该 总是至少包括你的包工作在哪个版本的Python上, 您的软件包在哪个许可证下可用,以及哪些操作系统 有关分类器的完整列表,请参见 https://pypi.org/classifiers/. -
urls
允许您列出任何数量的额外链接以在PyPI上显示。 一般来说,这可能是源代码,文档,问题跟踪器等。
有关详细信息,请参阅pyproject.toml指南 在这些和其他领域,可以定义在[project]
表.其他常用字段为keywords
,以提高可扩展性
创建README.md
打开README.md
,输入以下内容。您可以自定义此 如果你愿意的话
# Example PackageThis is a simple example package. You can use [GitHub-flavored Markdown](https://guides.github.com/features/mastering-markdown/) to write your content.
创建许可证
上传到Python包索引的每个包都必须包含 一张执照。这会告诉安装您的软件包的用户, 可以使用你的包裹。有关选择许可证的帮助,请参见 https://sealicense.com/.选择许可证后,打开 LICENSE
并输入许可证文本。例如,如果您选择了 MIT许可证:
Copyright (c) 2018 The Python Packaging AuthorityPermission 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.
大多数构建后端会自动在包中包含许可证文件。看到你 backend的文档了解更多详情。
包括其他文件
上面列出的文件将自动包含在您的 源分布如果你想 包括其他文件,请参阅构建后端的文档。
正在生成分发存档
下一步是生成分发包 为了包裹这些是上传到Python的存档, 软件包索引,可以通过pip安装。
确保你安装了最新版本的PyPA
py -m pip install --upgrade build
尖端
如果在安装这些组件时遇到问题,请参阅 安装软件包教程。
现在从pyproject.toml
所在的同一目录运行此命令:
py -m build
此命令应输出大量的文本,一旦完成应生成两个 dist
目录中的文件:
dist/ ├── example_package_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl └── example_package_YOUR_USERNAME_HERE-0.0.1.tar.gz
tar.gz
文件是一个源代码发行版 而.whl
文件是一个构建的发行版。 较新的pip版本优先安装已构建的发行版,但 如果需要的话,回退到源代码分发。你应该总是上传一个源 发行版,并为您的项目所在的平台提供构建的发行版。 兼容。在这种情况下,我们的示例包与Python兼容, 任何平台,因此只需要一个构建的发行版。
分发档案
最后,是时候把你的包上传到Python包索引了!
你需要做的第一件事是在TestPyPI上注册一个帐户, 是用于测试的包装索引的单独实例, 实验这对于像本教程这样的东西来说是很好的, 一定要上传到真实的索引。要注册帐户,请转到 https://test.pypi.org/account/register/并完成该页面上的步骤。 您还需要验证您的电子邮件地址,然后才能上传 任何包裹。 有关更多详细信息,请参阅使用TestPyPI。
要安全地上传项目,您创建一个在 https://test.pypi.org/manage/account/#api-tokens,将“范围”设置为“整个 账户”。在复制并保存令牌之前,请不要关闭页面-您 再也见不到那个信物了
现在您已注册,您可以使用GoogleChrome上载 分销包。你需要安装Twine:
py -m pip install --upgrade twine
安装完成后,运行Twine上传dist
下的所有归档文件:
py -m twine upload --repository testpypi dist/*
请输入用户名和密码对于用户名, 使用__token__
。对于密码,使用令牌值,包括 pypi-
前缀。
命令完成后,您应该看到类似于以下内容的输出:
Uploading distributions to https://test.pypi.org/legacy/ Enter your username: __token__ Uploading example_package_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2/8.2 kB • 00:01 • ? Uploading example_package_YOUR_USERNAME_HERE-0.0.1.tar.gz 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.8/6.8 kB • 00:00 • ?
上传后,您的包应该可以在TestPyPI上查看;例如: https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE
.
安装新上传的软件包
您可以使用pip安装您的软件包并验证它是否工作。 创建虚拟环境 然后从TestPyPI安装你的包:
py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
请确保在软件包名称中指定您的用户名!
pip应该安装来自TestPyPI的包,输出应该是 就像这样:
Collecting example-package-YOUR-USERNAME-HEREDownloading https://test-files.pythonhosted.org/packages/.../example_package_YOUR_USERNAME_HERE_0.0.1-py3-none-any.whl Installing collected packages: example_package_YOUR_USERNAME_HERE Successfully installed example_package_YOUR_USERNAME_HERE-0.0.1
注意
本例使用--index-url
标志指定TestPyPI,而不是 Live PyPI。此外,它还指定了--no-deps
。由于TestPyPI不 有与PyPI相同的包,尝试 安装依赖项可能会失败或安装一些意外的东西。虽然我们的 示例包没有任何依赖项,这是一个很好的做法,以避免 使用TestPyPI时安装依赖项。
您可以通过导入软件包来测试它是否正确安装。 确保你仍然在虚拟环境中,然后运行Python:
py
然后导入包:
from example_package_YOUR_USERNAME_HERE import example
example.add_one(2) 3
后续步骤
恭喜你,你已经打包并发布了一个Python项目! ✨ 🍰 ✨
请记住,本教程向您展示了如何将包上传到Test PyPI,它不是永久存储。测试系统偶尔会删除 包和账户。最好使用TestPyPI进行测试和实验 就像这个教程。
当您准备好将一个真实的包上传到Python包索引时,您可以 执行与本教程中相同的操作,但使用这些重要的 差异:
-
为您的包裹选择一个难忘且独特的名称。你不必附加 您的用户名,就像您在教程中所做的那样,但您不能使用现有的名称。
-
在https://pypi.org上注册一个帐户-请注意,这是两个独立的 服务器和来自测试服务器的登录详细信息不与 主服务器
-
使用
twine upload dist/*
上传包并输入凭据 你在真实的PyPI上注册的账户 既然你上传了 在生产环境中,您不需要指定--repository
; 默认情况下,包将上传到https://pypi.org/。 -
使用
python3 -m pip install [your-package]
从真实的PyPI安装您的软件包。
在这一点上,如果你想关于打包Python库的信息,请点击这里。 你可以做的一些事情:
-
阅读有关您选择的构建后端的高级配置: Hatchling, setuptools, Flit, PDM.。
-
查看本网站上的指南,了解更多高级 实用信息或讨论 了解有关特定主题的解释和背景。
-
考虑打包工具,这些工具提供单个命令行界面, 项目管理和包装,如hatch, flit, pdm, 和poetry。
注意到
[1]
从技术上讲,你也可以创建没有__init__.py
文件的Python包, 但它们被称为命名空间包 并将其视为高级主题(本教程中未涉及)。 如果您刚刚开始使用Python打包,建议您 坚持使用常规包和__init__.py
(即使文件是空的)。
相关文章:

打包Python项目
打包Python项目 本教程将指导您如何打包一个简单的Python项目。它将 向您展示如何添加必要的文件和结构来创建包,如何 构建包,以及如何将其上传到Python包索引(PyPI)。 尖端 如果您在运行本教程中的命令时遇到问题,请…...

使用Python实现爬虫IP负载均衡和高可用集群
做大型爬虫项目经常遇到请求频率过高的问题,这里需要说的是使用爬虫IP可以提高抓取效率,那么我们通过什么方法才能实现爬虫IP负载均衡和高可用集群,并且能快速的部署并且完成爬虫项目。 通常在Python中实现爬虫ip负载均衡和高可用集群需要一…...

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包,部署
环境准备 1、安装服务 Jenkins工具、环境、插件配置 全局变量配置 Manage Jenkins>tools>JDK 安装 安装插件 Deploy to container 安装此插件,才能将打好的包部署到tomcat上 配置国内mvn源 创建maven项目 1 2 3 4 5 6 7 8 9 10...

泰凌微(Telink)8258配置串口收发自定义数据
在官网下载SDK后(以Mesh SDK为例)使用Eclipse打开,对应MCU的配置文件在app_config_8258.h,默认的HCI接口是HCI_USE_NONE,如果改成HCI_USE_UART后可以通过串口收发数据,此时默认接收函数处理的是以Telink的协…...

入门低代码开发:快速构建应用程序的方法
一、什么是低代码 低代码开发是一种通过可视化建模和拖拽式设计工具来快速构建应用程序的方法。传统软件开发通常需要编写大量的代码,而低代码开发则提供了更高层次的抽象,使开发过程更加简单和高效。通过可视化界面,用户可以通过拖拽组件、配…...

常见客户端消息推送服务【Java后端】
客户端消息推送 1、推送服务 苹果 APNs(Apple Push Notification service) 谷歌 FCM(Firebase Cloud Messaging)GCM(Google Cloud Messaging) 第三方 个推(Getui)UniAppÿ…...

C++11(下)
可变参数模板 C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板. 相比C98/03, 类模版和函数模版中只能含固定数量的模版参数, 可变模版参数无疑是一个巨大的改进, 然而由于可变模版参数比较抽象, 使用起来需要一定的技巧, 所以这块还是比较晦涩的.掌握一些基…...

深度学习与逻辑回归模型的融合--TensorFlow多元分类的高级应用
手写数字识别 文章目录 手写数字识别1、线性回归VS逻辑回归Sigmoid函数 2、逻辑回归的基本模型-神经网络模型3、多元分类基本模型4、TensorFlow实战解决手写数字识别问题准备数据集数据集划分 特征数据归一化归一化方法归一化场景 标签数据独热编码One-Hot编码构建模型损失函数…...

水库大坝安全监测参数与设备
智慧水利中,水库大坝的安全监测必不可少。做好水库大坝的安全监测,是确保水库大坝结构安全和预防灾害的重要手段。对于预防灾害、保护人民生命财产安全、优化工程管理、改进工程设计、保护环境资源和提高公众信任等方面有着重要的意义。 水利水库大坝安全…...

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 22 章:情感分析提示 情感分析是一种可以让模型确定一段文字的情感基调或态度的技术,比如它是正面的、负面的还是中性的。 要在 ChatGPT 中使用情感分析提示,应向模型提…...

数据清洗、特征工程和数据可视化、数据挖掘与建模的主要内容
1.4 数据清洗、特征工程和数据可视化、数据挖掘与建模的内容 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.4节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学…...

C++ STL容器与常用库函数
STL是提高C编写效率的一个利器 STL容器: 一、#include <vector> 英文翻译:vector :向量 vector是变长数组(动态变化),支持随机访问,不支持在任意位置O(1)插入。为了保证效率,元素的增删一般应该在末尾…...

Nmap脚本简介
什么是Nmap脚本 Nmap脚本是一种由Nmap扫描器使用的脚本语言,用于扫描目标网络中的主机、端口、服务等信息,并提供一系列自动化的测试和攻击功能。从渗透测试工程师的角度来看,Nmap脚本是一种非常有用的工具,能够帮助渗透测试工程师…...

Kafka -- 初识
目录 kafka是什么 Topic Partition Broker Cousumer CousumerGroup Offset reblance broker 消息存储 Isr kafka是什么 Kafka 是一个分布式的消息引擎,能够发布和订阅消息流(类似于消息队列) 以容错的、持久的方式存储消息流 多分区…...

玩转Sass:掌握数据类型!
当我们在进行前端开发的时候,有时候需要使用一些不同的数据类型来处理样式,Sass 提供的这些数据类型可以帮助我们更高效地进行样式开发,本篇文章将为您详细介绍 Sass 中的数据类型。 布尔类型 在 Sass 中,布尔数据类型可以表示逻…...

Django + Matplotlib:实现数据分析显示与下载为PDF或SVG
写作背景 首先,数据分析在当前的信息时代中扮演着重要的角色。随着数据量的增加和复杂性的提高,人们对于数据分析的需求也越来越高。 其次,笔者也确确实实曾经接到过一个这样的开发需求,甲方是一个医疗方面的科研团队࿰…...

【Rust】第一节:安装
1 说明 一些学习记录 环境:MacOS 2 步骤 1、执行curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 2、看到打印 info: downloading installerWelcome to Rust!... ...This path will then be added to your PATH environment variable by modifyin…...

12-07 周四 Pytorch 使用Visdom 进行可视化
简介 在完成了龙良曲的Pytroch视频课程之后,楼主对于pytroch有了进一步的理解,比如,比之前更加深刻的了解了BP神经网络的反向传播算法,梯度、损失、优化器这些名词更加熟悉。这个博客简要介绍一下在使用Pytorch进行数据可视化的一…...

基于微信小程序的智慧校园导航系统研究
点我下载完整版 基于微信小程序的智慧校园导航系统研究 Research on Smart Campus Navigation System based on WeChat mini program 目录 目录 2 摘要 3 关键词 4 第一章 研究背景与意义 4 1.1 校园导航系统研究的背景 4 1.2 微信小程序在校园导航系统中的应用 5 1.3 研究的目…...

VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符
1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…...

19、XSS——HTTP协议安全
文章目录 一、Weak Session IDs(弱会话IDs)二、HTTP协议存在的安全问题三、HTTPS协议3.1 HTTP和HTTPS的区别3.2 SSL协议组成 一、Weak Session IDs(弱会话IDs) 当用户登录后,在服务器就会创建一个会话(Session),叫做会话控制&…...

深圳锐杰金融:用金融力量守护社区健康
深圳市锐杰金融投资有限公司,作为中国经济特区的中流砥柱,近年来以其杰出的金融成绩和坚定的社会责任立场引人注目。然而,这并非一个寻常的金融机构。锐杰金融正在用自己的方式诠释企业责任和慈善精神,通过一系列独特的慈善项目&a…...

python对py文件加密
参考文献: 【编程技巧】py文件批量编译,py批量转pyd,PyCharm设置py转pyd功能_py文件编译pyd-CSDN博客 【Python小技巧】加密又提速,把.py文件编译为.pyd文件(类似dll函数库),你值得拥有&#x…...

Thymeleaf生成pdf表格合并单元格描边不显示
生成pdf后左侧第一列的右描边不显示,但是html显示正常 显示异常时描边的写法 cellpadding“0” cellspacing“0” ,td,th描边 .self-table{border:1px solid #000;border-collapse: collapse;width:100%}.self-table th{font-size:12px;border:1px sol…...

C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲
今天这篇文章是接上一篇文章的,主要讲述的是获取SW设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点,然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来,也就是需要递归。想要用这个方法就要了解下面几个…...

分布式搜索引擎03
1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近…...

flex布局的flex为1到底是什么
参考博客:flex:1什么意思_公孙元二的博客-CSDN博客 flex:1即为flex-grow:1,经常用作自适应布局,将父容器的display:flex,侧边栏大小固定后,将内容区flex:1,内…...

class050 双指针技巧与相关题目【算法】
class050 双指针技巧与相关题目【算法】 算法讲解050【必备】双指针技巧与相关题目 code1 922. 按奇偶排序数组 II // 按奇偶排序数组II // 给定一个非负整数数组 nums。nums 中一半整数是奇数 ,一半整数是偶数 // 对数组进行排序,以便当 nums[i] 为…...

计算机操作系统4
1.什么是进程同步 2.什么是进程互斥 3.进程互斥的实现方法(软件) 4.进程互斥的实现方法(硬件) 5.遵循原则 6.总结: 线程是一个基本的cpu执行单元,也是程序执行流的最小单位。 调度算法:先来先服务FCFS、短作业优先、高响应比优先、时间片…...

【ASP.NET CORE】EntityFrameworkCore 数据迁移
如果数据库中已经有数据结构,可以使用Scaffold-DbContext来同步model,-connection是字符串,-outputdir 是输入文件夹名称,举例的脚本使用的是sqlserver数据库 通用 Scaffold-DbContext -Connection "DatabaseAddress;Data …...