我该如何在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而不是此模块。
在Python 3.3+中,如何正确地加载任意python源文件,而不使用已弃用的imp.load_module
函数?
imp.load_module()
而不是直接使用import语句。您是否打算稍后按名称导入模块(例如import a_b
)?您是否关心此方法不会使用任何自定义导入程序?您是否期望该模块具有完整功能(例如定义__name__
和__loader__
)? - Brett CannonTHIS='blah'
这样的行)。该文件的名称不以.py
结尾。我的程序读取该文件。 - falsetru