使用 pyproject.toml 构建时出现 ModuleNotFoundError

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

所以我正在开发一个包,我做了一些构建,但突然改变了一些东西,它不再构建了,无论是在我的机器上还是在 azure devops 上。它似乎在构建过程中没有安装依赖项,因为它在最顶层的导入时失败(可以告诉表单更改导入顺序)。 使用 python 构建 -m 构建 pyproject.toml 这是 pyproject.toml:

[build-system]
requires = ["setuptools>=61", "pyodbc"]
build-backend = "setuptools.build_meta"

[project]
name = "module"
description = "..."
authors = [
    { ... },
]

classifiers = [
    "Programming Language :: Python :: 3",
    "Operating System :: OS Independent",
]
dependencies = [
    'docx',    
    'click',
    'click_spinner',
    'dynaconf',
    'pandas',
    'pyarrow',
    'pyodbc',
    'sqlalchemy',
    'docxtpl'

]

dynamic = ["version"]

[tool.setuptools]
packages = ["module"]
include-package-data = true

[tool.setuptools.package-data]
module = ["assets/*.jpg", "assets/*.csv", "assets/*.docx"]


[project.urls]
"Homepage" = "..."

[project.scripts]
module = "module.main:cli"

[tool.setuptools.dynamic]
version = { attr = "module.__version__" }

然后我收到此错误:

    import click
ModuleNotFoundError: No module named 'click'

ERROR Backend subprocess exited when trying to invoke get_requires_for_build_sdist
python build pyproject.toml
1个回答
0
投票

在不同的平台上回答(man stackoverflow 已经完成了,疯狂......)

我认为错误消息具有误导性,问题出在 pyproject.toml 中的这一行:

[tool.setuptools.dynamic]
version = { attr = "module.__version__" }

就我而言,我在 version.py 中有 version 而不是 init.py 以避免循环导入,所以我需要像这样更改版本控制:

[tool.setuptools.dynamic]
version = { attr = "module.version.__version__" }

aa 就是这样!不知道为什么它在外部导入语句而不是在版本导入时中断。

© www.soinside.com 2019 - 2024. All rights reserved.