从文件加载的版本不符合 PEP 440

问题描述 投票:0回答:2

如标题所述,当我使用版本文件在本地运行

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

python-3.x setuptools
2个回答
5
投票

我已经解决了这个问题,尽管我对当前的文档或错误消息不满意,但就目前情况而言,我觉得很容易陷入这个陷阱。

所以解决方案是创建一个

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

来自文档

include_package_data
如果设置为 True,这会告诉 setuptools 自动包含在 MANIFEST.in 文件指定的包目录中找到的任何数据文件。有关更多信息,请参阅包含数据文件部分。

setuptools 文档V57.1.0 让我相信它会被包含在内:

自动包含源发行版中的所有相关文件,无需创建 MANIFEST.in 文件,也无需在源树更改时强制重新生成 MANIFEST 文件。

直觉上我会认为带有路径的

file:
关键字就足够了,或者由于没有这样的文件而产生的错误消息可能会为我提供更多线索。从 packaging-projects

中也看不出来这一点

但我想可以从 MANIFEST.in 文档推断出来。

我之所以这么说,是因为万一有人有任何有用的东西可以添加或反驳我目前的感觉:当前指南中可能有关于使用版本文件的遗漏。


0
投票

帮助我/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]
© www.soinside.com 2019 - 2024. All rights reserved.