我正在阅读this https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path关于从绝对路径导入模块的问题。答案建议使用以下代码:
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')
现在我可以访问其中的变量model_params.py
via import01.VARIABLE_NAME
。看起来相当于import numpy as np
. Where model_params.py
就好像numpy
and import01
就好像np
.
我想问一下第一个参数是什么load_source
方法呢?help(imp)
几乎什么也没说load_source
方法,例如下列的help(imp.load_source)
回报load_source(...)
Thanks
根据 behzad.nouri 评论进行编辑
在文档页面上加载源 https://docs.python.org/2/library/imp.html#imp.load_source据说:
name 参数用于创建或访问模块对象。
但是当我尝试访问时module.name
我收到有关未定义模块的错误。另外为什么没有可以通过以下方式访问的文档help
,我可以以某种方式安装它吗?我希望文档是 python 中代码本身的一部分,或者通常的做法是不内置它而是将其在线?
The 官方文档 https://docs.python.org/3.5/library/imp.html有关于该主题的更多信息。
基本上,您加载模块所使用的名称将在导入该模块的其他文件中使用。尽管没有module.name
模块存在于 python 路径中的任何位置,如果您加载某个模块并为其指定名称,则其他模块会执行常规操作import
使用该名称不会引发错误并按预期工作。也许一个小例子可以更好地说明这一点:
/tmp/测试/foo.py
value = 1337
/tmp/测试/bar.py
from foo.bar import value
def print_val():
print value
/tmp/测试/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 方模块内的导入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)