0

我想要实现的目标如下:

我有一个 python 包,我们称之为它foo,它包含一个目录,其中foo包含一个__init__.py和,在正常使用下,一个已编译的扩展库(一个.so或一个.pyd文件),它__init__.py导入到顶级命名空间。

现在,问题是我希望顶级命名空间包含一个版本字符串,该字符串setup.py在构建和打包期间可用,而扩展库不一定可用(尚未构建),因此ImportError在尝试导入时会导致foo.version.

现在,很明显,我可以有一个异常处理程序,__init__.py它只是忽略导入任何内容的失败,但这并不理想,因为用户关心包无法导入的原因可能是真正的原因。

有什么方法可以将版本字符串放在包中的一个位置,使其可导入,但不会破坏尝试导入扩展的异常?

4

1 回答 1

2

与在导入时忽略失败打印出跟踪消息或警告相反,这样用户仍然会得到负面反馈。

至于导入特定子文件,如果您使用的是 python 3.3+(或 python 2.7),您可以使用 imp.load_source ,它接受您要导入的文件的路径名。

于 2013-09-19T20:23:24.790 回答