我想要实现的目标如下:
我有一个python包,我们称之为foo
,包含一个包含foo
的目录__init__.py
,并且在正常情况下使用已编译的扩展库(.so
或.pyd
文件),__init__.py
导入顶级命名空间。
现在,问题在于我希望顶级命名空间包含一个版本字符串,在构建和打包期间setup.py
可用,当扩展库不一定可用时(尚未构建),等等在尝试导入ImportError
时会导致foo.version
。
现在,显然,我可以在__init__.py
中有一个异常处理程序,它只是忽略导入任何内容的失败,但这并不理想,因为可能有一个真正的原因,用户关心包不能进口。
我是否可以通过某种方式将版本字符串放在包中的单个位置,使其具有可导入性,但不会因尝试导入扩展名而中断异常?
答案 0 :(得分:2)
与导入打印出跟踪消息或警告时忽略失败相反,以便用户仍然会收到负面反馈。
如果使用python 3.3导入特定的子文件,可以使用imp.load_source,它接受你要导入的文件的路径名。