Python如何导入非.py扩展名的第三方模块文件。

来源:互联网 发布:javascript数组的方法 编辑:程序博客网 时间:2024/06/05 03:12

例如:我一个模块文件,扩展名是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.

原创粉丝点击