我正在读这个关于从绝对路径导入模块的问题.答案建议使用以下代码:
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是喜欢numpy和import01喜欢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使用该名称定期执行的其他模块也不会引发错误并按预期工作.也许一个小例子会更好地说明这一点:
value = 1337
Run Code Online (Sandbox Code Playgroud)
from foo.bar import value
def print_val():
print value
Run Code Online (Sandbox Code Playgroud)
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因为实际上不存在此类模块.
这种方法实际上可以用于猴子补丁,因为它会覆盖第三方模块内的导入.
| 归档时间: |
|
| 查看次数: |
8878 次 |
| 最近记录: |