例如:我一个模块文件,扩展名是txt,放在硬盘上任意一个目录。要导入怎么办?
我测试的结果是导入不用.py或.so扩展名字的模块文件会非常麻烦。
唯一可行的方法是这下面这样。
>>> print(open('d:/Temp/my_module.txt').read())
def foo():
print('foo')
>>> import importlib.util
>>> import importlib.machinery
>>> loader = importlib.machinery.SourceFileLoader('my_module', 'd:/Temp/my_module.txt')
>>> spec = importlib.util.spec_from_loader(loader.name, loader)
>>> mod = importlib.util.module_from_spec(spec)
>>> loader.exec_module(mod)
>>> mod.foo()
foo
>>
# 在Python 3.5/3.6 下测试通过。
python import 语句实际上背后就是importlib实现的。
另外还有一个imp 库可以实现导入任意文件的功能
>>> import imp
>>> my_mod = imp.load_source('foobar', 'd:/Temp/my_module.txt')
>>> my_mod.foo()
foo但是按照Python官方文档的说明imp模块在Python3.4以后已经不推荐使用了,建议使用importlib Deprecated since version 3.4: The imp package is pending deprecation in favor of importlib.
版权声明:本文为xpresslink原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。