如何在 Python 3.3+ 中导入任意 python 源文件(其文件名可以包含任何字符,并且并不总是以 .py
结尾)?
我使用 imp.load_module
如下:
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
它仍然适用于 Python 3.3,但根据 imp.load_module
文档,它已被弃用:
3.3 版 后已移除:不需要,因为加载程序应该用于加载模块,并且 find_module() 已弃用。
和 imp
模块文档建议使用 importlib
:
注意 新程序应该使用 importlib 而不是这个模块。
在不使用已弃用的 imp.load_module
函数的情况下,在 Python 3.3+ 中加载任意 python 源文件的正确方法是什么?
原文由 falsetru 发布,翻译遵循 CC BY-SA 4.0 许可协议
从
importlib
测试代码 中找到解决方案。使用 importlib.machinery.SourceFileLoader :
注意:仅适用于 Python 3.3+ 。
更新
Loader.load_module
自 Python 3.4 起已弃用。使用Loader.exec_module
代替: