如何通过其绝对文件名导入模块?

时间:2018-11-20 23:01:00

标签: python

我当前正在foo.py内部运行代码,该文件位于软件包pkg的某个目录中。 __name__ == pkg.foo

我有另一个文件bar.py的绝对路径,该文件位于另一个目录中,甚至不一定是同一棵树。

当前,我以以下方式运行此代码:

data = None
f = open(path)
data = f.read()
f.close()

g = dict(globals())
g['__file__'] = path
exec(compile(data, path, 'exec'), g, None)

但是我想找到某种通过__import__impimplib完成此操作的方法。 我不想修改sys.path

我需要同时兼容 和Python 2以及Python 3。

如果可能的话,我希望模块的“名称”与文件名有所不同,但这不是硬性要求。

我该如何实现?

Edit:请注意,在示例代码中,我明确指定了全局变量。我可以使用__import__来执行此操作,但不能指定路径,而可以使用imp.load_module()来指定路径,但不能指定全局路径。我需要同时做这两种事情,因为我需要设置其他全局变量,而不仅仅是文件名。

0 个答案:

没有答案