【问题标题】:importlib can't find moduleimportlib 找不到模块
【发布时间】:2016-08-25 03:14:54
【问题描述】:

cat test.py

from importlib import import_module

bar = import_module('bar', package='project')

ls 项目/

__init__.py  
__init__.pyc
bar.py
bar.pyc

python test.py

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    bar = import_module('bar', package='project')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named bar

列出导入的模块(sys.modules)不显示任何模块项目

我可以使用 python shell 导入 bar

有什么想法吗?

【问题讨论】:

  • test.py 相对于project/ 在哪里?
  • 它在同一个文件夹中

标签: python python-importlib


【解决方案1】:

它需要在 bar 前面加一个点 .. :-(

bar = import_module('.bar', package='project')

【讨论】:

  • 或者跳过传递package参数,直接调用它为import_module('project.bar'),它仍然返回bar(不像__import__特殊函数,它在导入两个@之后会返回project 987654327@ 和 project.bar)。
【解决方案2】:

import_lib 的文档说

如果名称以相对术语指定,则必须将包参数指定给包,该包将充当解析包名称的锚(例如 import_module('..mod', 'pkg.subpkg')将导入 pkg.mod)。

因此表达式也可以写成

bar = import_module('..bar',package='project.bar')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多