【问题标题】:Can't import module with importlib.import_module无法使用 importlib.import_module 导入模块
【发布时间】:2016-07-16 11:56:49
【问题描述】:

我想使用importlib.import_module 动态导入模块。我的代码是这样的:

import os
import importlib

os.chdir('D:\\Python27\\Lib\\bsddb')
m = importlib.import_module('db')
print dir(m)

我可以在 Python 控制台中成功地做到这一点。但是如果我在文件C:\Users\Administrator\Desktop>python test.py中运行这些代码,就不行了:

Traceback (most recent call last):
File "test.py", line 5, in <module>
  m = importlib.import_module("db")
File "D:\Python27\lib\importlib\__init__.py", line 37, in import_module
  __import__(name)
ImportError: No module named db

但是如果我将 db.py 文件复制到与脚本文件相同的目录中,它就可以工作。我不知道为什么。

【问题讨论】:

  • 您能展示一下您的文件夹结构吗? db 是 python 文件还是文件夹?请提供更多详细信息。
  • @SarvagyaPant 嗨 Sarvagya,我尝试加载的模块位于 Python 标准库中。

标签: python import module python-importlib


【解决方案1】:

编辑:我已经在控制台中测试了早期的代码并且它有效。但是,我再次修改了代码。我将bsddb 模块直接保留在D drive 中并再次将代码更改为:

import os
os.chdir("D:\\")
import importlib
m = importlib.import_module("bsddb.db")
print len(dir(m))
print dir(m)

这会导致模块显示319list of functions and variables。看来您可能需要像上面一样使用dot (.) notation 导入模块。

【讨论】:

  • 你把包含这些代码的脚本文件放在哪个路径?我尝试了您的代码,但仍然没有好运。 :-(
  • 是的,它有效。但是这行os.chdir(..) 可以去掉。我认为bsddb.db 应该是模块的全局名称,不是吗?
  • 如果你去这个链接docs.python.org/2/library/…它说如果模块存在于python路径中,它将导入该模块,否则它将查找调用python文件的位置。如果您将bsddb 文件夹更改为bsddb_your_sample 并使用m = importlib.import_module("bsddb_your_sample.db"),它将查看python 路径,但它不存在,因此这将查看您当前的调用路径并在那里找到它并返回数据。
  • 因此,要么将文件夹保存在主 python 文件附近,要么使用 os.chdir() 转到该位置。希望这可以帮助。如果有效,请标记答案:)
  • 您能否解释一下为什么我的原始代码在控制台中有效,但在脚本文件中无效?
猜你喜欢
  • 2012-05-27
  • 2020-02-09
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多