如果未安装依赖项,则来自setup.py的python导入错误

时间:2018-01-17 11:52:26

标签: python python-3.x import setup.py

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

setup.py还为我的软件包安装了其他相关的第三方库。

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

问题是如果setup.py导入__about__.py然后从包中执行__init__.py并且更深层次,这会在安装期间生成导入错误,因为仍然没有安装我的依赖库。

结构是:

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

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

欢迎任何其他建议。

包只是python3。

1 个答案:

答案 0 :(得分:0)

实际上我通过将import mypackage.__about__中的setup.py替换为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