setuptools
setuptools是pythondistutils的增强,能够使得开发者更加方便地去建立和分发python包,尤其如果这个包依赖于其他包的时候。
Quick start
安装
安装最新的setuptools
pip install --upgrade setuptools
大多数情况下并不需要这么做,推荐使用命令行工具build,这个工具能够自动下载setuptools和任何其他在项目构建时所需要的依赖。你只需要将需求在扩展包的根目录下的pyproject.toml文件中说明即可。可以使用pip来按照build,之后便可以使用python -m build指令。
pip install --upgrade build
基础使用
当创建python包时,必须提供一个包含build-sytems部分的pyproject.toml的文件,类似如下
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
这部分声明了build system的依赖,以及那个库将完成真正的打包工作。
除了声明build system的依赖,还必须添加包的信息比如元数据、内容、依赖等等。这同样可以放在同一个pyproject.toml中,或者放在分开的setup.dfg或者```setup.py``中
在pyproject.toml中
[project]
name = "mypackage"
version = "0.0.1"
dependencies = [
"requests",
'importlib-metadata; python_version<"3.8"',
]
在setup.cfg中
[metadata]
name = mypackage
version = 0.0.1
[options]
install_requires =
requests
importlib-metadata; python_version < "3.8"
在setup.py中
from setuptools import setup
setup(
name='mypackage',
version='0.0.1',
install_requires=[
'requests',
'importlib-metadata; python_version == "3.8"',
],
)
最后,组织python代码以使得能够分发为类似如下的结构(#表示可选择的文件)
mypackage
├── pyproject.toml # and/or setup.cfg/setup.py (depending on the configuration method)
| # README.rst or README.md (a nice description of your package)
| # LICENCE (properly chosen license information, e.g. MIT, BSD-3, GPL-3, MPL-2, etc...)
└── mypackage
├── __init__.py
└── ... (other Python files)
使用build来生产python包
python -m build
概览
包发现
对于简单文件夹结构的项目,setuptools可以自动探查所有的packages和命名空间。但是对于复杂结构的项目,需要在配置文件中进行描述。
setup.py示例
from setuptools import find_packages # or find_namespace_packages
setup(
# ...
packages=find_packages(
# All keyword arguments below are optional:
where='src', # '.' by default
include=['mypackage*'], # ['*'] by default
exclude=['mypackage.tests'], # empty by default
),
# ...
)
Entry points和自动脚本创建
Setuptools支持在安装的过程中创建脚本,将他们指定为entry points之后可以在包内运行。这项特征的一个应用在pip中可以体现:使得在运行类似pip install而不是必须是python -m pip install。
setup.py的示例如下
setup(
# ...
entry_points={
'console_scripts': [
'cli-name = mypkg.mymodule:some_func',
]
}
)
当此项目被安装时,会创建一个cli-name的可执行脚本,该脚本会激活mypkg.mymodule中的some_func方法。
依赖管理
setuptools可以明确需要自动安装的依赖,
setup.py示例
setup(
# ...
install_requires=["docutils", "requests <= 0.4"],
# ...
)
包含数据文件
setuptools提供了三种方式声明将要包含在安装包中的数据文件。最简单的方式是使用include_package_data关键字,setup.py的示例如下:
setup(
# ...
include_package_data=True,
# ...
)
开发模式
setuptools允许在安装包时不用拷贝任何文件到解释器文件夹(比如site-packages目录),这将使得你可以改变源代码并且在不需要rebuild和reinstall的情况下使得更改生效。使用如下命令即可
pip install --editable .

本文详细介绍了Python的setuptools模块,包括快速入门、安装、基础使用、包发现、Entry points和自动脚本创建、依赖管理、包含数据文件以及开发模式。setuptools为Python开发者提供了强大的包创建和分发功能,支持自动发现包结构、创建脚本、管理依赖以及便捷的开发模式。

6797

被折叠的 条评论
为什么被折叠?



