分发Python模块


jcLee95 的 CSDN 博客
邮箱 :291148484@163.com
CSDN 主页https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
本文地址https://blog.csdn.net/qq_28550263/article/details/111149218

目 录


1.安装python模块的构建(bulid)工具setuptools、wheel和twine

2.创建项目目录结构

3.创建setup.py文件

4.创建README.md文件

5.创建许可证

6.生成发布档案

7. 上传发布档案


模块的打包和分发在很多语言中都是一个比较基础的操做,不论是java中的jar包还是python的轮子,它们都能让自己的代码可以更方便地让更多人使用,同时也方便更好地管理已经完成地代码。

1.安装python模块的构建(bulid)工具setuptools、wheel和twine

python -m pip install setuptools wheel twine

2.创建项目目录结构

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

packaging_folder
└── yourpackage└── __init__.py

创建此目录文件结构后,您将希望在顶级文件夹packaging_folder中运行本教程中的所有命令-则需要在cmd窗口(Windows)或者终端(Linux)中执行以下命令,进入到你的打包文件夹中。

cd packaging_folder

可以看到新建的packaging_folder文件夹中含有一个__init__.py文件,这意味着packaging_folder本身也是一个python包。
yourpackage/__init__.py 表示你写好的将要打包的模块,模块需要一个初始化文件__init__.py,但也允许是一个空文件夹。

现在,您将创建一些文件来打包该项目并为分发做准备。创建下面列出的新文件,并将它们放置在项目的根目录中-您将在以下步骤中向其中添加内容。

packaging_folder
├── LICENSE
├── README.md
├── yourpackage
│   └── __init__.py
├── setup.py
└── tests

创建一个测试文件夹

tests/表示用于放置单元测试文件的预留空文件夹。

3.创建setup.py文件

setup.py是setuptools的构建脚本。它告诉setuptools有关您的软件包(例如名称和版本)以及要包括的代码文件的信息。

打开setup.py并输入以下内容。更新软件包名称以包含您的用户名(例如example-pkg-theacodes),以确保您具有唯一的软件包名称,并且该软件包与本教程中其他人上传的软件包没有冲突。

import setuptoolswith open("README.md", "r", encoding="utf-8") as fh:long_description = fh.read()setuptools.setup(name="example-pkg-YOUR-USERNAME-HERE",            # 替换为你自己的用户名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",      # 模块的主页,常常作者在github发布模块的页面packages=setuptools.find_packages(),classifiers=["Programming Language :: Python :: 3","License :: OSI Approved :: MIT License","Operating System :: OS Independent",],python_requires='>=3.7',                         # 你的包要求的的最低python版本
)

setup()中的常用参数含义

  • name:是您的软件包的分发名称。
    该名称可以是任何名称,只要仅包含字母,数字_和即可-。也一定不能在pypi.org上使用它。请务必使用您的用户名进行更新,因为这样可以确保您不会尝试上传与上传软件包时已经存在的软件包名称相同的软件包。
  • version:软件包的版本。
  • author与author_email:用于标识软件包的作者和email。
  • description :软件包的概述,用一句话描述。
  • long_description是包装的详细说明。
    这在Python软件包索引的软件包详细信息软件包中显示。在这种情况下,将加载详细描述,README.md这是常见的模式。
  • long_description_content_type:告诉索引用于长描述的标记类型。
  • url:项目主页的URL。
    对于许多项目,这仅是指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。
  • packages:是应该包含在分发包中的所有Python导入包的列表。
    无需手动列出每个软件包,我们可以 用来自动发现所有软件包和子软件包。在这种情况下,软件包列表将是唯一存在的软件包。find_packages()example_pkg
  • classifiers:给出了指数和点子你的包一些额外的元数据。
    在这种情况下,该软件包仅与Python 3兼容,已获得MIT许可,并且与操作系统无关。您应始终至少包括您的软件包所使用的Python版本,软件包所使用的许可证以及软件包所使用的操作系统。
    【Note】每个项目的维护者都为PyPI提供了一个“trove classifiers”列表,以对每个发行版进行分类,描述发行版的用途,可以在哪些系统上运行以及成熟度如何。然后,社区成员可以使用这些标准化的分类器根据其所需标准查找项目。

4.创建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.

5.创建许可证

对于上传到Python软件包索引的每个软件包,都必须包含许可证,这一点很重要。这会告诉安装软件包的用户使用条款。有关选择许可证的帮助,请参阅 https://choosealicense.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.

6.生成发布档案

下一步是为程序包生成分发程序包。这些是已上载到Package Index的归档文件,可以通过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_HERE-0.0.1-py3-none-any.whlexample_pkg_YOUR_USERNAME_HERE-0.0.1.tar.gz

其中 tar.gz文件是源存档,而.whl文件是 内置分发。较新的pip版本优先安装内置发行版,但如果需要,将回落到源归档文件中。

您应该始终上传源档案,并为项目兼容的平台提供内置档案。在这种情况下,我们的示例包在任何平台上都与Python兼容,因此仅需要一个内置发行版。

7. 上传发布档案

最后,是时候将您的包上传到Python Package Index了!
TestPyPI是Python包索引(PyPI)的单独实例 ,可让您试用分发工具和过程,而不必担心会影响实际索引。TestPyPI托管在 test.pypi.org
您需要做的第一件事是在上注册一个帐户。测试PyPI是用于测试和实验的包索引的单独实例。对于像本教程这样的事情非常有用,我们不必上载到真实索引。要注册帐户,请访问Pypi用户注册并完成该页面上的步骤。

【注意】TestPyPI的数据库可能会定期删除,因此删除用户帐户并不罕见。

完成账户创建后将跳转到以下页面:

这时候,请注意查收您的邮箱,你会收到一封这样的邮件:

点击"click this link to verify your email address"在以下页面中输入你创建账户时的密码,并单机Confirm password按钮。

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

当将包上传到PyPI时,API令牌提供了另一种方式(而不是用户名和密码)进行身份验证。您可以为整个PyPI帐户创建令牌,在这种情况下,令牌将适用于与该帐户关联的所有项目。或者,您可以将令牌的范围限制为特定项目。

关于令牌的详细信息请参考https://test.pypi.org/help/#apitoken

python基础知识专题 - 模块的打包和发布相关推荐

  1. 正在等待继续编辑 - Python - 基础知识专题 - 配置文件与日志管理

    Python中使用配置文件 由于博主水平有限,疏忽在所难免. 邮箱:291148484@163.com 希望对大家所有帮助,感谢朋友们的支持与鼓励! [导论] 这实际上是一个实战相关的话题,因为很难想 ...

  2. python语言的单行注释以井号开头_推荐|零基础学习Python基础知识

    原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...

  3. 2.Python 基础知识

    文章目录 Python 基础知识 知识点一 : 注释 1.单行注释 2.多行注释 知识点二 : 变量 知识点三 : 数据类型 1.数字类型 1.1 整型 1.2 浮点型 1.3 复数类型 2.字符串 ...

  4. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  5. python基本语法规则-python基础知识——基本语法

    在python基础知识这个系列中,准备罗列出我学习python的一些基础知识,包括:基本语法 控制语句 内置数据结构 模块和函数 字符串 文件处理 面向对象 异常处理 以前写机器学习算法喜欢使用Mat ...

  6. python的基础知识可以应用到哪方面-Python基础知识

    python基础 python的诞生 2002年,python 2.x 2008年,python 3.x python的命名 马戏团的名称 python简介 简单.易学 持快速开发. 跨平台. 开源. ...

  7. Python基础知识有哪些?你都知道吗

    Python基础知识有哪些?这几年,人工智能.数据分析等各行业的兴起,让更多人知道了Python,让Python是又火了一把.Python作为一个简介又实用的编程语言,让许多想从事信息技术行业的人准备 ...

  8. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  9. Python基础知识学习笔记——Matplotlib绘图

    Python基础知识学习笔记--Matplotlib绘图 整理python笔记,以防忘记 文章目录 Python基础知识学习笔记--Matplotlib绘图 一.绘图和可视化 1.导入模块 2.一个简 ...

最新文章

  1. [转] fastText
  2. 微信支付异常:appid and openid not match
  3. springboot和flowable modeler整合
  4. yocto中文环境搭建
  5. hdu 1150 Machine Schedule (经典二分匹配)
  6. OpenCV黑白图像增强——灰度级切片
  7. Visual Studio Code(VS code)介绍
  8. 桥梁模式和适配器模式的区别
  9. Font support in Adobe form
  10. 百度SEO站群Emlog最新付费模板带会员 做资源网不错
  11. 判断坐标位置C语言,〓求助〓谁能帮忙编个程序:输入N个点坐标,判断能否构成多边形....
  12. jQuery操作cookie 的方法
  13. 百度贴吧中的匿名回复,根本不是匿名,完全可以看到用户的全部IP。
  14. 导线测量步骤c语言程序,基于excel表的附合导线计算程序.doc
  15. DBUtils工具类的使用方法详解
  16. html视频自动播放循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  17. ae合成设置快捷键_超全AE快捷键大全
  18. abap --MOVE-CORRESPONDING
  19. Java中dynamic是什么_java中dynamic web project与web project 的区别
  20. 涨分神器-基于PPYOLOE的切图和拼图解决方案

热门文章

  1. 程序员面试金典——7.5平分的直线
  2. 剑指offer——面试题4:替换空格
  3. Leetcode 863.二叉树中所有距离为K的结点
  4. matlab保存图片时不使用指令设置图像分辨率、尺寸等
  5. 错误:无法与 SFTP 服务器建立 FTP 连接
  6. pytorch: nn.Sequential(func1,func2,func3)
  7. 您未被授权查看该页 您不具备使用所提供的凭据查看该目录或页的权限 HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。...
  8. python读取超大csv
  9. N35-第十四周作业
  10. 技术篇-HBase Coprocessor 的实现与应用