我希望将我的包的__version__
个保存在__init__
可以访问的单个源文件中,并且能够在setup
中导入它,而不依赖于包的依赖项.
假设我有一个包,其中包含一个带有版本1.0.0
的模块module_a
,并且只有一个依赖项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
访问module_a.foo
.
有没有合适的方法来解决这个问题?