微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从文件加载的版本不符合 PEP 440

标题所述,当我使用版本文件在本地运行 python -m build 时出现此错误。我已经阅读了 PEP 440,对我来说,它似乎是合规的。我无法从 documentation on setuptools 中看出为什么我会遇到这个问题

我真的很感激这方面的一些帮助,因为我不明白我如何能够在 python -m build 上运行调试器,或者更具体地了解为什么 {{1} 的 _parse_version } 对我的版本文件不满意。

更多详情:

我有一个项目结构如下:

setuptools/config.py

版本

src/
   mypackage/
      __init__.py
      VERSION
pyproject.toml
setup.cfg
setup.py

setup.cfg

0.0.1

setup.py

name = mypackage
version = file: src/mypackage/VERSION
# etc. etc. etc.

pyproject.toml

#!/usr/bin/env python
# Used to create editable installs
import setuptools

setuptools.setup()

有关错误的更多详细信息:

[build-system]
# Minimum requirements for the build system to execute.
requires = [
    "setuptools>=42","wheel"]  # PEP 508 specifications.
build-backend = "setuptools.build_Meta"

解决方法

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

因此,解决方案是使用以下行创建一个 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

来自docs

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

setuptools documentation V57.1.0 让我相信它会被包括在内:

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

直觉上我会认为带有路径的 file: 关键字就足够了,或者由于没有这样的文件而产生的错误消息可能会给我更多的线索.这在 packaging-projects

中也不明显

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。