【发布时间】:2020-03-04 08:14:15
【问题描述】:
采用如下封装结构
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py
setup.py的内容
from setuptools import setup
setup()
setup.cfg的内容
[metadata]
name = my_package
version = 0.1
[options]
packages = find:
我可以像这样为my_package 构建轮子或源代码分发
pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz
但根据maintainer of setuptools 的说法,声明式构建配置是理想的,使用命令式构建将是一种代码味道。所以我们用pyproject.toml替换setup.py:
.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml
pyproject.toml的内容
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]
你仍然可以像以前一样建造一个轮子,它可以工作。但是 sdist 不起作用:
python: can't open file 'setup.py': [Errno 2] No such file or directory
那么您应该如何使用 setuptools 实际构建 .tar.gz 文件?创建 sdist 的面向用户的工具是什么?我不想更改构建后端。看起来其他打包工具都编写了自己的构建入口点,但我认为在元数据中定义声明式构建系统的全部目的是让您不必亲自动手构建系统,学习每个需要调用不同的打包工具,或者必须进入解释器并手动调用 Python API。但是构建系统要求的 PEP 现在已经超过 2 年了。我在这里遗漏了什么明显的东西吗?
如何在不使用setup.py 文件的情况下构建源代码分发?
【问题讨论】:
标签: python setuptools pypi python-packaging pyproject.toml