尝试使用 setuptools (setup.py) 读取 __version__ 会导致构建期间出现 FileNotFoundError

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

编辑:请参阅下面的答案以解释我的错误和解决方案。

我试图按照 @dnozay 的答案中的说明进行操作,关于 如何从文件中读取 setup.py 中的

__version__

我的(简化的)项目文件树是:

setup.py my_module ├── __init.py__ ├── _version.py └── myclasses.py
按照答案的指示,我在

__version__

中公开
_version.py

# _version.py _version = { 'major': 1, 'minor': 0, 'revis': 0, } __version__ = '.'.join([str(a) for a in _version.values()])
我的

setup.py

包含:

from setuptools import setup, find_packages from distutils.util import convert_path main_ns = {} ver_path = convert_path("my_module/_version.py") with open(ver_path) as ver_file: exec(ver_file.read(), main_ns) setup(... version=main_ns['__version__'], package_dir={"": "my_module"}, packages=find_packages(where="my_module"), ...)
但是,当我尝试使用 

python3 -m build

 构建软件包时,我得到了 
FileNotFoundError

* Building wheel from sdist * Creating virtualenv isolated environment... * Installing packages in isolated environment... (setuptools>=45) * Getting dependencies for wheel... Traceback (most recent call last): File "/home/username/.local/lib/python3.8/site-packages/pep517/in_process/_in_process.py", line 363, in <module> main() File "/home/username/.local/lib/python3.8/site-packages/pep517/in_process/_in_process.py", line 345, in main json_out['return_val'] = hook(**hook_input['kwargs']) File "/home/username/.local/lib/python3.8/site-packages/pep517/in_process/_in_process.py", line 130, in get_requires_for_build_wheel return hook(config_settings) File "/tmp/build-env-xlvmof6k/lib/python3.8/site-packages/setuptools/build_meta.py", line 177, in get_requires_for_build_wheel return self._get_build_requires( File "/tmp/build-env-xlvmof6k/lib/python3.8/site-packages/setuptools/build_meta.py", line 159, in _get_build_requires self.run_setup() File "/tmp/build-env-xlvmof6k/lib/python3.8/site-packages/setuptools/build_meta.py", line 174, in run_setup exec(compile(code, __file__, 'exec'), locals()) File "setup.py", line 10, in <module> with open(ver_path) as ver_file: FileNotFoundError: [Errno 2] No such file or directory: 'my_module/_version.py'
    
python python-3.x setuptools setup.py
2个回答
0
投票
好吧,我看到我的错误了。

find_packages()

函数试图在
my_package/my_package/
中查找模块文件,这就是构建失败的原因,
my_package/my_package/_version.py
不存在。

为了解决这个问题,我将

setup()

 更改为:

setup=(... version=main_ns['__version__'], packages=find_packages(where='.') ...)
    

0
投票
就我而言,pyproject.toml 目录中有一个拼写错误。

我有这个:

# cat pyproject.toml [tool.setuptools_scm] write_to = "src/mylibname/lib-api/_version.py"
这不是正确的 write_to 路径(下划线而不是破折号):

# cat pyproject.toml [tool.setuptools_scm] write_to = "src/mylibname/lib_api/_version.py"
    
© www.soinside.com 2019 - 2024. All rights reserved.