在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。
答案 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