我想将我的包的
__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
。
有没有正确的方法来解决这个问题?