首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入带有imp的模块

导入带有imp的模块
EN

Stack Overflow用户
提问于 2014-02-24 13:10:22
回答 1查看 3.7K关注 0票数 1

我有一个脚本,它执行以下操作:

代码语言:javascript
复制
import imp
imp.load_source("storage_configuration_reader","/bi/opt/RNAspace/rnaspace_sources/rnaspace/rnaspace/rnaspace/dao/storage_configuration_reader.py")

稍后,我使用相同的名称调用该模块的一个类:

代码语言:javascript
复制
config = storage_configuration_reader()

如果像上面那样导入它,我将得到以下NameError NameError: global name 'storage_configuration_reader' is not defined,但是如果我使用以下代码:

代码语言:javascript
复制
import imp
imp.load_source("storage_configuration_reader","/bi/opt/RNAspace/rnaspace_sources/rnaspace/rnaspace/rnaspace/dao/storage_configuration_reader.py")
import storage_configuration_reader
config = storage_configuration_reader()

然后我得到了这个错误TypeError: 'module' object is not callable

更改imp.load_source的名称无助于导入对象:

代码语言:javascript
复制
import imp
imp.load_source("storage_configuration","/bi/opt/RNAspace/rnaspace_sources/rnaspace/rnaspace/rnaspace/dao/storage_configuration_reader.py") 
<module 'storage_configuration' from '/bi/opt/RNAspace/rnaspace_sources/rnaspace/rnaspace/rnaspace/dao/storage_configuration_reader.pyc'>
 import storage_configuration
 config = storage_configuration_reader()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'storage_configuration_reader' is not defined

导入这样一个对象的最佳方法(AKA工作方式)是哪一种?

信息: storage_configuration_reader定义:

代码语言:javascript
复制
class storage_configuration_reader(object):
    """ 
    Class configuration_reader: this object read the config file and return the 
    different configuration values
    """
    ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-24 13:30:36

imp.load_source使用给定的path加载模块,并使用新的name命名它,它不像from your_module_at_path import your_class_by_name,它就像import your_module_at_path as new_name (不完全相同)。

此外,您需要将名称赋值给一个变量以使用它:

代码语言:javascript
复制
wtf=imp.load_source("new_module_name", your_path)
#wtf is the name you could use directly:
config = wtf.storage_configuration_reader()

名称new_module_name作为密钥存储在字典sys.modules中,您可以这样使用它:

代码语言:javascript
复制
sys.modules['new_module_name'].storage_configuration_reader()

一种从其他目录导入模块的更简单的方法是将模块的路径添加到sys.path

代码语言:javascript
复制
import sys
sys.path.append("/bi/opt/RNAspace/rnaspace_sources/rnaspace/rnaspace/rnaspace/dao")
import storage_configuration_reader
config = storage_configuration_reader.storage_configuration_reader()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21988781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档