如标题所述,当我使用版本文件在本地运行
python -m build
时,出现此错误。我已阅读 PEP 440,对我来说,它似乎符合要求。我从setuptools 的文档看不到为什么我会遇到这个问题
我真的很感激对此的一些帮助,因为我不知道如何在
python -m build
上运行调试器,或者更具体地了解为什么 _parse_version
的 setuptools/config.py
对我的版本文件不满意。
更多详情:
我的项目结构如下:
src/
mypackage/
__init__.py
VERSION
pyproject.toml
setup.cfg
setup.py
版本
0.0.1
设置.cfg
name = mypackage
version = file: src/mypackage/VERSION
# etc. etc. etc.
设置.py
#!/usr/bin/env python
# Used to create editable installs
import setuptools
setuptools.setup()
pyproject.toml
[build-system]
# Minimum requirements for the build system to execute.
requires = [
"setuptools>=42",
"wheel"] # PEP 508 specifications.
build-backend = "setuptools.build_meta"
有关错误的更多详细信息:
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/build_meta.py", line 154, in get_requires_for_build_wheel
return self._get_build_requires(
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/build_meta.py", line 135, in _get_build_requires
self.run_setup()
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/build_meta.py", line 150, in run_setup
exec(compile(code, __file__, 'exec'), locals())
File "setup.py", line 5, in <module>
setuptools.setup()
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/__init__.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.8/distutils/core.py", line 121, in setup
dist.parse_config_files()
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/_virtualenv.py", line 21, in parse_config_files
result = old_parse_config_files(self, *args, **kwargs)
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/dist.py", line 778, in parse_config_files
parse_configuration(self, self.command_options,
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/config.py", line 157, in parse_configuration
meta.parse()
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/config.py", line 463, in parse
section_parser_method(section_options)
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/config.py", line 436, in parse_section
self[name] = value
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/config.py", line 220, in __setitem__
value = parser(value)
File "/tmp/build-env-2kboopyp/lib/python3.8/site-packages/setuptools/config.py", line 553, in _parse_version
raise DistutilsOptionError(tmpl.format(**locals()))
distutils.errors.DistutilsOptionError: Version loaded from file: src/mypackage/VERSION does not comply with PEP 440:
ERROR Backend subproccess exited when trying to invoke get_requires_for_build_wheel
我已经解决了这个问题,尽管我对当前的文档或错误消息不满意,但就目前情况而言,我觉得很容易陷入这个陷阱。
所以解决方案是创建一个
MANIFEST.in
文件,其中包含以下行:
include src/mypackage/VERSION
在我的仓库的顶层:
src/
mypackage/
__init__.py
VERSION
pyproject.toml
setup.cfg
setup.py
MANIFEST.in
此外,还必须将以下内容添加到
setup.cfg
[options]
include_package_data = True
来自文档:
如果设置为 True,这会告诉 setuptools 自动包含在 MANIFEST.in 文件指定的包目录中找到的任何数据文件。有关更多信息,请参阅包含数据文件部分。include_package_data
setuptools 文档V57.1.0 让我相信它会被包含在内:
自动包含源发行版中的所有相关文件,无需创建 MANIFEST.in 文件,也无需在源树更改时强制重新生成 MANIFEST 文件。
直觉上我会认为带有路径的
file:
关键字就足够了,或者由于没有这样的文件而产生的错误消息可能会为我提供更多线索。从 packaging-projects 中也看不出来这一点
但我想可以从 MANIFEST.in 文档推断出来。
我之所以这么说,是因为万一有人有任何有用的东西可以添加或反驳我目前的感觉:当前指南中可能有关于使用版本文件的遗漏。
帮助我/storage/emulated/0/1/mediapipe-0.10.11/MANIFEST.in
global-exclude .git*
global-exclude *_test.py
include CONTRIBUTING.md
include LICENSE
include MANIFEST.in
include README.md
include requirements.txt
recursive-include mediapipe/modules *.txt
PyDroid 3:
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/setuptools/dist.py:315: SetuptoolsDeprecationWarning: Invalid version: 'dev'.
!!
********************************************************************************
The version specified is not a valid version according to PEP 440.
This may not work as expected with newer versions of
setuptools, pip, and PyPI.
This deprecation is overdue, please update your project and remove deprecated
calls to avoid build errors in the future.
See https://peps.python.org/pep-0440/ for details.
********************************************************************************
!!
self._validate_version(self.metadata.version)
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
error: no commands supplied
[Program finished]