Python setuptools 是 Python 包管理工具,用于简化 Python 项目的打包和分发。它是 Python 标准库 distutils 的增强版,提供了更多功能和更易用的界面。
打包 是指将软件及其相关资源(例如代码、库、数据等)组合成一个可安装的文件。
分发 是指将打包好的软件发布给用户。分发可以通过多种方式进行,例如通过网络下载、移动存储设备等。
pip install --upgrade setuptools
1. setup.py
setup.py
文件是 Python 项目中重要的配置文件,用于定义项目的打包信息和依赖项。它可以让开发者轻松地将自己的项目分发给其他人安装使用。
1.1 项目元数据
name
: 项目名称,用于标识项目。示例:name='my-project'
version
: 项目版本号,遵循语义化版本规范(semver)。示例:version='0.1.0'
description
: 项目简介,简要描述项目的功能和用途。示例:description='A simple Python project for demonstrating setup.py usage.'
author
: 项目作者,可以是姓名或组织名称。示例:author='John Doe'
author_email
: 项目作者邮箱地址。示例:author_email='johndoe@example.com'
url
: 项目主页 URL 地址。示例:url='https://github.com/johndoe/my-project'
license
: 项目许可证,指定项目的开源许可证类型。示例:license='MIT'
keywords
: 项目关键词,用于项目搜索和分类。示例:keywords=['python', 'example', 'setup.py']
from setuptools import setup setup( # 项目基本信息 name = "mytools", version = "1.7.3", description = "工具包", # 项目作者信息 author = "edward meng", author_email = "chinacpp@hotmail.com", # 项目主页地址 url = "https://mengbaoliang.cn/", license = 'Apache License 2.0', # 项目的关键字 keywords=['python', 'tools'], )
1.2 打包配置
packages
: 需要打包的项目包列表。示例:packages=['myproject', 'myproject.subpackage']
package_dir
: 指定项目包的目录结构。示例:package_dir={'': 'src', 'myproject.subpackage': 'subpackage'}'
data_files
: 需要安装的额外数据文件列表,例如配置文件、文档等。示例:data_files=[('docs', ['README.md', 'LICENSE.txt'])]
include_package_data
: 是否包含项目包中的数据文件。示例:include_package_data=True
exclude_package_data
: 排除项目包中不需要安装的数据文件。示例:exclude_package_data=['test/data', 'docs/build']
packages
表示需要打包的项目包列表,示例:packages=['myproject', 'myproject.subpackage']
。如果包较多的话,手动编写这些名字较为麻烦,可以使用 find_packages
函数来自动获得 setup.py
同级目录下的所有包(包含 __init__.py
的目录)。有时候,我们的包在指定的目录下,此时可以通过 package_dir
来指定包的所在目录。
from setuptools import setup from setuptools import find_packages setup( name="mytools", version="1.7.3", description="工具包", author="edward meng", author_email="chinacpp@hotmail.com", url="https://mengbaoliang.cn/", license='Apache License 2.0', keywords=['python', 'tools'], # 指定包 # packages=['mytools', 'mytools.tools1', 'mytools.tools2'], packages=find_packages(), )
1.3 依赖项
install_requires
: 项目运行所需的第三方库依赖项。示例:install_requires=['requests', 'beautifulsoup4']
tests_require
: 项目测试所需的第三方库依赖项。
1.4 入口点
entry_points
: 指定项目的入口点,例如命令行工具的入口脚本。示例:entry_points={'console_scripts': ['myproject=myproject.myscript:main']}