Var*_*rdd 5 python python-import python-2.7 python-3.x
我有这个设置:
文件:a.ext1 a.py
a.ext1由于某种原因加载a.py,但作为引擎,我需要加载文件a.ext1.
我可以在py3中使它正常工作,但我无法在py2中使用它.
这是我的python2尝试:**这是主要的流程,当然还有更多的代码.
file = os.path.abspath(os.path.expanduser('a.ext1')
directory = os.path.dirname(file)
sys.path.append(directory)
fullname = 'my.name.space.a'
sys.modules['my.name.space'] = imp.new_module('my.name.space')
x = imp.load_source(fullname,file)
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做; x,它会告诉我:
module 'my.name.space' from '<path>/a.ext1'
Run Code Online (Sandbox Code Playgroud)
但如果我做dir(x),它会给我a.py的东西.我希望它能从a.ext1文件中提供给我的东西.
我怎样才能在py2上运行?
以下是它在py3上的工作原理:
file = os.path.abspath(os.path.expanduser('a.ext1'))
directory = os.path.dirname(file)
sys.path.append(directory)
fullname = 'my.name.space.a'
loader = importlib.machinery.SourceFileLoader(fullname = fullname,
path = file)
x = loader.load_module()
Run Code Online (Sandbox Code Playgroud)
现在x正是我想要的,a.ext1文件,而不是.py
知道如何让这个为py2工作吗?
(顺便说一句,我已经阅读了关于Stack溢出这个主题的所有内容,但从来没有.py也存在的情况)
不知道创建空模块和附加路径的繁琐内容,但在 2.7 上对我来说同样有效。一个简单的独立示例绝对不应该有问题。
我想说你的程序a.py也会被加载到my.name.space.a程序的其他地方,在这种情况下,它的内容会与你在同一模块名称下加载的任何其他内容发生冲突。一次只能有一个给定名称的全局模块实例,例如:
a.py:
py_stuff = 1
Run Code Online (Sandbox Code Playgroud)
扩展名1
ext1_stuff = 1
Run Code Online (Sandbox Code Playgroud)
测试-ok.py:
import imp
x = imp.load_source('a', 'a.ext1')
print(x) # <module 'a' from 'a.ext1'>
print(dir(x)) # ['__builtins__', ..., 'ext1_stuff']
Run Code Online (Sandbox Code Playgroud)
测试不正常.py:
import imp
import a
x = imp.load_source('a', 'a.ext1')
print(x) # <module 'a' from 'a.ext1'>
print(dir(x)) # ['__builtins__', ..., 'ext1_stuff', 'py_stuff']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |