首页 > 解决方案 > 如何判断 setup() 是否正在读取 setup.cfg?

问题描述

我得到了一个使用pyscaffold生成的 Python 项目,我在根目录setup.pysetup.cfg. 我修改了setup.cfg文件,在元数据部分下添加了一行version=1.0.0

但是,运行python setup.py developpython 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已阅读?

生成的 pyscaffoldsetup.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')每次都失败,无论版本值是什么。

标签: pythonsetuptools

解决方案


PyScaffold 配置setuptools为使用setuptools_scm. 这意味着,为了更改项目的版本,您需要使用 git 来标记您的项目这在https://pyscaffold.org/en/v3.3.x/features.html#versioning-and-git-integration中有简要描述。

我想这就是为什么更改setup.cfg不会更改创建的发行版版本的原因。先验setuptools应始终阅读setup.cfg

为了确保setuptools阅读setup.cfg您可以做的一项实验,您可以:

  1. 确保删除*.egg-info项目根目录内或文件夹内的任何文件src夹(以确保您看不到缓存版本)。
  2. 更改setup.cfg文件中的作者之类的简单内容
  3. 像往常一样构建你的包(python setup.py bdist_wheel例如)
  4. <your-project>.egg-info在项目的根目录或目录中查找生成的新文件夹src。阅读PKG-INFO那里。您应该能够看到证明setuptools正在阅读的更改setup.cfg(否则最好的选择应该是打开票证/问题setuptools

推荐阅读