如何判断 setup() 是否正在读取 setup.cfg?
How to tell whether setup() is reading the setup.cfg?
我得到了一个使用 pyscaffold 生成的 Python 项目,我在根 setup.py
和 setup.cfg
看到了两个标准的主项目文件。我修改了 setup.cfg
文件,在元数据部分下添加了一行 version=1.0.0
.
但是,运行 python setup.py develop
或 python setup.py sdist
我在输出中看到工件名称没有我在 setup.cfg
中指定的版本。我看到以下内容:
Installed c:\users\SkyWalker\code\my_project\src
Processing dependencies for my_project==0.0.post0.dev1+g8386a10.dirty
Finished processing dependencies for my_project==0.0.post0.dev1+g8386a10.dirty
分发工件有这个 0.0.post0.dev1+g8386a10.dirty
版本,我不知道它是从哪里得到的。如何判断 python.cfg
是否被读取?
生成的 pyscaffold setup.py
如下所示:
# -*- coding: utf-8 -*-
"""
Setup file for aqm_database_api.
Use setup.cfg to configure your project.
This file was generated with PyScaffold 3.2.3.
PyScaffold helps you to put up the scaffold of your new Python project.
Learn more under: https://pyscaffold.org/
"""
import sys
from pkg_resources import VersionConflict, require
from setuptools import setup
try:
require('setuptools>=37.0')
except VersionConflict:
print("Error: version of setuptools is too old (<37.0)!")
sys.exit(1)
if __name__ == "__main__":
setup(use_pyscaffold=True)
所以它没有显式加载 setup.cfg
,而且 require('setuptools>=37.0')
行每次都失败,无论版本值是多少。
PyScaffold 配置 setuptools
使用 setuptools_scm
给出的版本。
这意味着,为了更改项目的版本,您需要 use git to tag your project. This is briefly described in https://pyscaffold.org/en/v3.3.x/features.html#versioning-and-git-integration.
我想这就是为什么更改 setup.cfg
不会更改创建的分发版本的原因。先验 setuptools
should always read setup.cfg
.
要确保 setuptools
正在阅读 setup.cfg
,您可以做一个实验:
- 确保删除项目根目录或
src
文件夹内的任何 *.egg-info
文件夹(以确保您看不到缓存版本)。
- 在
setup.cfg
文件中像作者一样更改一些简单的东西
- 像往常一样构建您的包(例如
python setup.py bdist_wheel
)
- 寻找在项目根目录或
src
目录中生成的新 <your-project>.egg-info
文件夹。阅读那里的 PKG-INFO
。您应该能够看到您的更改,这证明 setuptools
正在读取 setup.cfg
(否则最好的选择应该是用 setuptools
打开 ticket/issue)
我得到了一个使用 pyscaffold 生成的 Python 项目,我在根 setup.py
和 setup.cfg
看到了两个标准的主项目文件。我修改了 setup.cfg
文件,在元数据部分下添加了一行 version=1.0.0
.
但是,运行 python setup.py develop
或 python setup.py sdist
我在输出中看到工件名称没有我在 setup.cfg
中指定的版本。我看到以下内容:
Installed c:\users\SkyWalker\code\my_project\src
Processing dependencies for my_project==0.0.post0.dev1+g8386a10.dirty
Finished processing dependencies for my_project==0.0.post0.dev1+g8386a10.dirty
分发工件有这个 0.0.post0.dev1+g8386a10.dirty
版本,我不知道它是从哪里得到的。如何判断 python.cfg
是否被读取?
生成的 pyscaffold setup.py
如下所示:
# -*- coding: utf-8 -*-
"""
Setup file for aqm_database_api.
Use setup.cfg to configure your project.
This file was generated with PyScaffold 3.2.3.
PyScaffold helps you to put up the scaffold of your new Python project.
Learn more under: https://pyscaffold.org/
"""
import sys
from pkg_resources import VersionConflict, require
from setuptools import setup
try:
require('setuptools>=37.0')
except VersionConflict:
print("Error: version of setuptools is too old (<37.0)!")
sys.exit(1)
if __name__ == "__main__":
setup(use_pyscaffold=True)
所以它没有显式加载 setup.cfg
,而且 require('setuptools>=37.0')
行每次都失败,无论版本值是多少。
PyScaffold 配置 setuptools
使用 setuptools_scm
给出的版本。
这意味着,为了更改项目的版本,您需要 use git to tag your project. This is briefly described in https://pyscaffold.org/en/v3.3.x/features.html#versioning-and-git-integration.
我想这就是为什么更改 setup.cfg
不会更改创建的分发版本的原因。先验 setuptools
should always read setup.cfg
.
要确保 setuptools
正在阅读 setup.cfg
,您可以做一个实验:
- 确保删除项目根目录或
src
文件夹内的任何*.egg-info
文件夹(以确保您看不到缓存版本)。 - 在
setup.cfg
文件中像作者一样更改一些简单的东西 - 像往常一样构建您的包(例如
python setup.py bdist_wheel
) - 寻找在项目根目录或
src
目录中生成的新<your-project>.egg-info
文件夹。阅读那里的PKG-INFO
。您应该能够看到您的更改,这证明setuptools
正在读取setup.cfg
(否则最好的选择应该是用setuptools
打开 ticket/issue)