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

Wak*_*nka 5 python module

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

import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
Run Code Online (Sandbox Code Playgroud)

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

__int__.py
model_params.py
Run Code Online (Sandbox Code Playgroud)

我这样做了:

import01 = imp.load_source('module.name', '/home/wakatana/experiments/model_params/model_params.py')
Run Code Online (Sandbox Code Playgroud)

现在我可以访问model_params.pyvia中的变量了import01.VARIABLE_NAME.这似乎相当于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的文档页面上说:

name参数用于创建或访问模块对象.

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

Ano*_*ous 17

官方文档对主题的更多一点的信息.

基本上,加载模块的名称将用于导入该模块的其他文件.即使module.namepython路径中的任何位置都没有模块,如果加载某个模块并为其命名,那么import使用该名称定期执行的其他模块也不会引发错误并按预期工作.也许一个小例子会更好地说明这一点:

/tmp/test/foo.py

value = 1337
Run Code Online (Sandbox Code Playgroud)

/tmp/test/bar.py

from foo.bar import value

def print_val():
    print value
Run Code Online (Sandbox Code Playgroud)

/tmp/test/run.py

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

import bar

bar.print_val()
Run Code Online (Sandbox Code Playgroud)

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

这种方法实际上可以用于猴子补丁,因为它会覆盖第三方模块内的导入.