单一位置保存`__version__`?

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

我想将我的包的

__version__
保留在单个源文件中,
__init__
可以访问该文件,并且还能够将其导入到
setup
中,而不依赖于包的依赖项。

假设我有一个包含单个模块

module_a
且版本为
1.0.0
的包,并且具有单个依赖项 -
module_b

module-a/src/module_a/__init__.py

__version__ = `1.0.0`

from module_a.inner.foo import bar

module-a/src/module_a/inner/foo.py

from module_b import baz
...
def bar():
   baz.do_something()

module-a/setup.py

from setuptools import setup
from module_a import __version__

setup(
    version=__version__,
    ...,
)

现在当我想将

module_a
更新到
1.0.1
版本时,我只需要更新
__init__.py
而不是
setup.py

现在的问题是

setup
依赖于正在安装的
module-b
,这不好。

我目前的解决方法:

module-a/src/module_a.__init__.py

__version__ = `1.0.0`

try:
    from module_a.foo import bar
except ImportError:
    # this should happen only when import __version__, __name__ from setup.py
    pass

现在设置不依赖于

module-b
:) 但问题是如果由于某种原因
from module_a.inner.foo import bar
失败(例如,在未安装
module-b
的情况下)导入将默默失败并且不会引发适当的异常,并且无法从
module_a.foo
访问
module_a

有没有正确的方法来解决这个问题?

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