pypi 打包分发
打包Python项目
本教程将指导您如何打包一个简单的Python项目。它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引。
一个简单的项目
本教程使用一个名为的简单项目example_pkg
。如果您不熟悉Python的模块和导入包,请花几分钟时间阅读包含文件包和模块的Python文档。
要在本地创建此项目,请创建以下文件结构:
/example_pkg
/example_pkg
__init__.py
创建此结构后,您将需要在顶级文件夹中运行本教程中的所有命令 - 所以一定要确保。cd example_pkg
您还应该编辑example_pkg/__init__.py
并在其中放入以下代码:
name = "example_pkg"
这只是为了您可以在本教程后面验证它是否正确安装。
创建包文件
现在,您将创建一些文件来打包此项目并准备分发。创建下面列出的新文件 - 您将在以下步骤中向其添加内容。
/example_pkg
/example_pkg
__init__.py
setup.py
LICENSE
README.md
创建的setup.py
setup.py
是setuptools的构建脚本。它告诉setuptools你的包(例如名称和版本)以及要包含的代码文件。
打开setup.py
并输入以下内容,您可以根据需要个性化值:
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()
有几个论点。此示例包使用相对最小的集:
name
是您的包的名称。只要包含字母,数字_
和,就可以是任何名称-
。它也不能在pypi.org上使用。version
是包版本看 PEP 440有关版本的更多详细信息。author
并author_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安装。
确保您拥有setuptools
并wheel
安装了最新版本:
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_username
name
setup.py
dist
上传后,您的包应该可以在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项目! ✨
pypi 打包分发的更多相关文章
- Python打包分发工具setuptools简介(转)
作为Python标准的打包及分发工具,setuptools可以说相当地简单易用.它会随着Python一起安装在你的机器上.你只需写一个简短的setup.py安装文件,就可以将你的Python应用打包. ...
- Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)
转载自:http://blog.konghy.cn/2018/04/29/setup-dot-py/ Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python ...
- javascript进阶——测试和打包分发
建立一个面向对象的好的代码基础后,为了达到代码重用的目的,通过调试使用适当的测试用例进行测试尤为必要,之后就是打包分发的主题. 一.调试与测试 1.调试 Firebug:包含了错误控制台.调试器.DO ...
- iOS APP打包分发给远程的手机测试
APP要打包给远程的朋友或客户测试,但又不是企业账号的情况下,我们只能根据手机的udid进行描述证书的配置,再打包分发给提供了udid的手机进行安装 一.如何得到udid? 手机连接到mac电脑,打开 ...
- vagrant的学习 之 打包分发
vagrant的学习 之 打包分发 一.打包Box: (1)关闭虚拟机. vagrant halt (2)打包: vagrant package 这样打包出来的文件叫package.box. 指定生成 ...
- Python打包分发工具setuptools
作为Python标准的打包及分发工具,setuptools可以说相当地简单易用.它会随着Python一起安装在你的机器上.你只需写一个简短的setup.py安装文件,就可以将你的Python应用打包 ...
- 使用 pkg 打包分发 nodejs 应用
pkg 是一个很不错的跨平台 nodejs 应用打包工具,使用此工具,我们只需要给与用户提供一个简单的 可执行文件就可以了,同时代码也是二进制的,提高了代码的安全性 备注:测试demo 很简单,也比较 ...
- python打包分发工具setuptools使用记录
关于python setup.py文件的编写技巧 环境:最新版setuptools,初步认识setuptools可以参考这篇文章 1. 自定义命令 from setuptools import set ...
- electron打包分发
原始的方式打包 下载对应的版本号的Release Electron 然后把对应的项目方便整理成这样的目录结构(Windows下) node_modules重新安装,不然可能启动失败 把整文件夹给别人就 ...
随机推荐
- [LeetCode] 917. Reverse Only Letters 只翻转字母
Given a string S, return the "reversed" string where all characters that are not a letter ...
- [LeetCode] 910. Smallest Range II 最小区间之二
Given an array A of integers, for each integer A[i] we need to choose either x = -K or x = K, and ad ...
- [LeetCode] 632. Smallest Range Covering Elements from K Lists 覆盖K个列表元素的最小区间
You have k lists of sorted integers in ascending order. Find the smallest range that includes at lea ...
- [LeetCode] 234. Palindrome Linked List 回文链表
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- CSP2019蒸馏记
Day -\(\infty\) ~ Day -2 认真准备联赛. Day -1 复习模板,全真模拟比赛平衡树 下午进行了湖南大学 2 小时游. Day 0 上午睡过头了 下午日常训练,并没有什么开放日 ...
- STM32Cube在Main里判断USB是否已连接到电脑
首先添加这两个Includes: #include "usbd_def.h" #include "usbd_hid.h" 然后就可以在代码里用这个来判断是否有连 ...
- [BAT脚本] 1、BAT脚本FOR循环操作文件和命令返回实例
Wednesday, 31. October 2018 08:18PM - beautifulzzzz 一.需求 需要在windows上实现一个bat脚本解析json,将json转换为自己想要的key ...
- json data转匿名对象C#
using Newtonsoft.Json.Linq; 代码如下: static void Main(string[] args) { Console.WriteLine("Test 4.8 ...
- 论文阅读: Direct Monocular Odometry Using Points and Lines
Direct Monocular Odometry Using Points and Lines Abstract 大多数VO都用点: 特征匹配 / 基于像素intensity的直接法关联. 我们做了 ...
- jenkins+sonarqube进行代码质量检测
JavaNeverGiveUp教程篇 用jenkins+sonarqube去检查代码是非常方便的,它能检查出代码中可能存在的一些问题,比如io流未关闭.空指针异常.死循环.代码不规范等问题. 1. 搭 ...