gpt4 book ai didi

python - imp.load_source 另一个文件而不是 .py ,但 .py 也存在于该目录中

转载 作者:太空狗 更新时间:2023-10-30 01:37:59 29 4
gpt4 key购买 nike

我有这个设置:

文件:一个.ext1一个.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)

现在,如果我这样做了; x,它会告诉我:

module 'my.name.space' from '<path>/a.ext1'

但是如果我执行 dir(x) ,它会给我 a.py 中的内容。我想让它给我一个 .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()

现在 x 正是我想要的,a.ext1 文件,而不是 .py

知道如何让它在 py2 上工作吗?

(顺便说一句,我已经在 Stack overflow 上阅读了所有我能找到的关于这个主题的内容,但从来没有出现过 .py 也存在的情况)

最佳答案

不知道创建空模块和附加路径是什么笨拙的东西,但在 2.7 上对我来说同样适用。一个简单的独立示例肯定不会有问题。

我会说你的 a.py 也被加载到 my.name.space.a 中,在程序的其他地方,在这种情况下它的内容 < em>clash 与您在同一模块名称下加载的任何其他内容。一次只能有一个给定名称的全局模块实例,例如:

a.py:

py_stuff = 1

a.ext1

ext1_stuff = 1

测试ok.py:

import imp

x = imp.load_source('a', 'a.ext1')

print(x) # <module 'a' from 'a.ext1'>
print(dir(x)) # ['__builtins__', ..., 'ext1_stuff']

测试不正常.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']

关于python - imp.load_source 另一个文件而不是 .py ,但 .py 也存在于该目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079834/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com