我想编写一个新的Python包,我想通过PyPI提供这个包。过去,我总是使用setup.py。但这一次,我决定接受使用setup.cfg的新的最佳实践。因此,我开始阅读一些文档,主要是config.html。
我还决定使用吡咯烷酮生成文件。pyscaffold为我生成了一个setup.cfg文件,我(只是为了测试目的)在metadata部分下添加了version = 5.1.1,如上面的文档所描述的那样。
为了方便起见,我使用anaconda并创建了一个新的空环境:
$ python --version
Python 3.9.7
$ pip list
...
PyScaffold 4.1.1
setuptools 58.4.0
setuptools-scm 6.3.2
wheel 0.37.0但是,当我执行pip install -e .时,版本被忽略了,pip分配了一个不同的版本:
$ pip install -e .
Obtaining file:///tmp/test_package
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Installing collected packages: test-package
Attempting uninstall: test-package
Found existing installation: test-package 0.0.post1.dev10+g3ed39c8.d20211106
Uninstalling test-package-0.0.post1.dev10+g3ed39c8.d20211106:
Successfully uninstalled test-package-0.0.post1.dev10+g3ed39c8.d20211106
Running setup.py develop for test-package
Successfully installed test-package-0.0.post1.dev1+g228b46chttps://stackoverflow.com/a/27077610/1480131提到setupToolsVersion30.3.0支持在setup.cfg中放置元数据,我使用的是58.4.0,所以是一个更新的版本。
我也用version = file:VERSION.txt这样的不同格式进行了测试,但这也没有帮助,pip只是忽略了version条目。
我遗漏了什么?我做错了什么?
为了能够重现错误,我准备了一个带有文件的小型git:套餐,有人得到了不同的结果吗?
发布于 2021-11-06 14:48:49
这是因为pyscaffold生成了一个使用setuptools-scm进行版本检测的项目。当使用setuptools-scm时,版本不是从version元数据中读取的,而是从存储库标记中解析的。0.0.post1.dev10+g3ed39c8.d20211106版本可以如下所示:
0.0.post1 -虚拟版本,因为你还没有任何标签在回购;dev10 --您有10个未包含在任何版本标记中的提交(基本上是自上次标记以来提交的数量);g3ed39c8 -您从3ed39c8安装的提交的简短散列(前缀g表示它是一个Git );d20211106 - d意味着您已经从一个脏的状态安装了( Git修改了一些版本的文件),剩下的只是时间戳。如果要使用来自setup.cfg的版本元数据,只需在setup.py中删除setuptools-scm激活即可。
if __name__ == "__main__":
try:
setup()
except:
...然后,您也可以清除pyproject.toml,尽管这并不是明确要求的:
[build-system]
requires = ["setuptools>=46.1.0", "wheel"]
build-backend = "setuptools.build_meta"如果您想继续使用setuptools-scm ( IMO是防止您意外发布相同版本但内容不同的dists的一个很好的工具),那么只需添加一个新的标记开始版本控制:
$ git tag -a 5.1.1 -m 'start versioning'如果您有一个干净的回购状态(没有修改的文件),pip install -e .将立即安装5.1.1版本。否则,您将得到一个带有后缀的5.1.1。
使用setuptools-scm的好处是忽略了setup.cfg中的版本元数据,因此您不必自己去碰它,并且可以安全地删除version = 5.1.1行。
https://stackoverflow.com/questions/69860987
复制相似问题