目录
官方地址
https://packaging.python.org/tutorials/packaging-projects/
打包流程
创建pyproject.toml(可选)
pyproject.toml是告诉构建工具(例如pip10+和 build)的文件,您正在使用的系统以及构建所需的系统。如果缺少此文件,则默认为假定使用经典的setuptools构建系统,但最好明确一些。如果您有pyproject.toml文件,您将可以依赖wheel和存在其他软件包。大多数项目用以下设置就够了
[build-system]
requires = [
"setuptools>=42",
"wheel"
]
build-backend = "setuptools.build_meta"
build-system.requires提供构建软件包所需的软件包列表。在此处列出某些内容只会使其在构建期间可用,而在安装之后不可用。
build-system.build-backend从技术上讲是可选的,但是setuptools.build_meta:__legacy__如果您忘记包含它,则会得到 替代,因此请始终包含它。如果要使用flit或poetry之类的其他构建系统, 这些将在此处使用,并且配置详细信息将与下面描述的setuptools配置完全不同。看PEP 517和PEP 518了解背景和详细信息
配置元数据
元数据有两种类型:静态和动态。
静态元数据(setup.cfg):setup.cfg是一个ini文件,其中包含setup.py命令的默认选项 。setup.cfg提供一种方式,可以让包的开发者提供命令的默认选项,同时为用户提供修改的机会。对setup.cfg的解析,是在setup.py之后,在命令行执行前
动态元数据(setup.py):setup.py的主要特征是它包含一个全局setup()函数。此函数的关键字参数是如何定义项目的特定详细信息。
静态元数据应该是首选,动态元数据仅在绝对必要时才用作逃生舱口(官网原话,但是发现好多都是用的*setup.py*)。
元数据参数详情
静态源数据
[metadata]
# replace with your username:
# 包名
name = example-pkg-YOUR-USERNAME-HERE
# 软件版本
version = 0.0.1
# 作者
author = Example Author
# 作者邮箱
author_email = author@example.com
# 该软件包的简介,一句话摘要
description = A small example package
# 软件详细说明这在Python软件包索引的软件包详细信息页面上显示。在这种情况下,将README.md使用file:指令加载长描述,这是一个常见的模式。
long_description = file: README.md
# 告诉索引用于长描述的标记类型
long_description_content_type = text/markdown
# 项目主页的URL。对于许多项目,这仅是指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。
url = https://github.com/pypa/sampleproject
# 可让您列出要在PyPI上显示的任意数量的额外链接。通常,这可能是文档,问题跟踪器等。
project_urls =
Bug Tracker = https://github.com/pypa/sampleproject/issues
# 一些额外的源数据
classifiers =
Programming Language :: Python :: 3 # 该软件包使用的python版本
License :: OSI Approved :: MIT License # MIT许可证
Operating System :: OS Independent # 兼容的操作系统
[options]
# 软件包名称和目录的映射。空的程序包名称表示“根程序包”,即项目中包含该程序包的所有Python源文件的src目录
package_dir =
= src
# 应该包含在分发包中的所有Python导入包的列表。无需手动列出每个软件包,我们可以使用指令自动发现所有软件包和子软件包并 指定要使用的。find:options.packages.findpackage_direxample_pkg
packages = find:
# 项目支持的Python版本。
python_requires = >=3.6
[options.packages.find]
where = src
动态源数据(如果包含该文件,即使没有参数也要调用setup())
import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
# 必须要调用,即使没有参数
setuptools.setup(
name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own 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",
project_urls={
"Bug Tracker": "https://github.com/pypa/sampleproject/issues",
},
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
package_dir={"": "src"}, # 这里有坑,如果有两个src目录好像会有问题,直接不指定改参数,下面不指定where就没问题,后续再搞清楚原因
packages=setuptools.find_packages(where="src"),
python_requires=">=3.6",
)
创建README.md
安装软件包
方式一
打包先上传到pypi公有库,然后直接pip install
方式二
直接把代码上传到git仓库,github,gitlab,gitee都行,然后通过以下命令安装
- pip install git+<git仓库地址>
- pip install git+<git仓库地址>@<分支名称>
# 需要账号密码登录时用以下命令,注意:如果用户名密码包含@字符,需要转义: %40, 如账号为xxx@qq.com, 密码为123456, 仓库地址为https://gitee.com/xxx/xxx.git
- pip install git+https://xxx%40qq.com:123456@gitee.com/xxx/xxx.git
方式三
通过pypiserver搭建私有库,搭建教程参考pypiserver github地址