我当前正在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__
,imp
或implib
完成此操作的方法。 我不想修改sys.path
。
我需要同时兼容 和Python 2以及Python 3。
如果可能的话,我希望模块的“名称”与文件名有所不同,但这不是硬性要求。
我该如何实现?
Edit:请注意,在示例代码中,我明确指定了全局变量。我可以使用__import__
来执行此操作,但不能指定路径,而可以使用imp.load_module()
来指定路径,但不能指定全局路径。我需要同时做这两种事情,因为我需要设置其他全局变量,而不仅仅是文件名。