gpt4 book ai didi

python - imp.load_source 方法的第一个参数是做什么的?

转载 作者:太空狗 更新时间:2023-10-30 00:24:09 26 4
gpt4 key购买 nike

我正在阅读 this所以关于从绝对路径导入模块的问题。一个答案建议使用以下代码:

import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

我想从具有以下结构的目录导入文件(它是包):

__int__.py
model_params.py

我这样做过:

import01 = imp.load_source('module.name', '/home/wakatana/experiments/model_params/model_params.py')

现在我可以通过 import01.VARIABLE_NAME 访问 model_params.py 中的变量。这似乎等同于 import numpy as np。其中 model_params.py 类似于 numpyimport01 类似于 np

请问load_source方法的第一个参数是做什么用的? help(imp) 几乎没有提及 load_source 方法,例如以下 help(imp.load_source) 返回 load_source(...)

谢谢

根据 behzad.nouri 评论编辑

load_source 的文档页面上据说:

The name argument is used to create or access a module object.

但是当我尝试访问 module.name 时,我收到有关未定义模块的错误。还有为什么没有可以通过help 访问的文档,我可以通过某种方式安装它吗?我希望文档是 python 中代码本身的一部分,或者通常的做法是不内置它而是在线使用它?

最佳答案

official documentation有更多关于该主题的信息。

基本上,您加载模块时使用的名称将用于导入该模块的其他文件中。即使 python 路径中的任何地方都不存在 module.name 模块,如果您加载某个模块并为其指定该名称,则使用该名称执行常规 import 的其他模块将不会引发错误并按预期工作。也许一个小例子可以更好地说明这一点:

/tmp/test/foo.py

value = 1337

/tmp/test/bar.py

from foo.bar import value

def print_val():
print value

/tmp/test/run.py

import imp
foo = imp.load_source('foo.bar', '/tmp/test/foo.py')

import bar

bar.print_val()

正如预期的那样,您将 1337 打印到屏幕上。如果名称不是 foo.bar,则在 bar.py 中导入会失败,因为实际上不存在这样的模块。

这个方法实际上可以用于猴子补丁,因为它会覆盖第 3 方模块中的导入。

关于python - imp.load_source 方法的第一个参数是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773310/

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