如果未安装依赖项,则从 setup.py 导入 Python 错误



在一个我的 python 包中,setup.py 是导入模块__about__.py位于包内(存储所有元数据并希望在 pakcage 和设置之间共享它(。

setup.py还为我的软件包安装其他依赖的第三方库。

同样在模块__init__.py的包内导入了其他模块,如(from mypackage.mymodule import MyClass(以保持简单用法(因为更容易编写import mypackage然后a = mypackage.MyClass()(。

问题是,如果setup.py导入__about__.py那么也从包和更深的所有内容__init__.py执行,这会在安装过程中生成导入错误,因为仍然没有安装我的依赖库。

结构为:

setup.py
mypackage/
    __init__.py
    __about__.py
    mymodule.py

我想保持相同的用法并保持结构,但如果之前没有安装依赖模块,则在安装过程中解决导入问题。 可能最好的方法是在不执行__init__.py的情况下导入mypackage.__about__,但是如何执行呢?

或任何其他建议都是受欢迎的。

该软件包仅为 python3。

实际上,我通过将setup.py中的import mypackage.__about__替换为exec找到了解决方案:

_ABOUT = {}
exec(open('mypackage/__about__.py').read(), _ABOUT)
setuptools.setup(
    name=_ABOUT['NAME'],
    version=_ABOUT['VERSION'],
    ...

文件__about__.py包含:

NAME = 'mypackage'
VERSION = 'v1.0.0'
...

此解决方案运行良好。只有一个小问题是 PEP 警告 W0122

相关内容

  • 没有找到相关文章

最新更新