笔记_python模块编译之setuptools

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

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 .
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值