加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-3.x – 在python3中使用importlib进行动态导入时出错

发布时间:2020-12-20 11:04:36 所属栏目:Python 来源:网络整理
导读:我一直在尝试使用importlib和 python3(3.6). 目录结构 main.py #Note: I will only modify line 4 that uses importlibimport importlibif __name__ == '__main__': print("In main.py") hello = importlib.import_module('hello',package='./') print("Load
我一直在尝试使用importlib和 python3(3.6).

目录结构

main.py

#Note: I will only modify line 4 that uses importlib
import importlib
if __name__ == '__main__':
    print("In main.py")
    hello = importlib.import_module('hello',package='./')
    print("Loaded hello.py")
    hello.hello()

hello.py

def hello():
    print('Hello world')

文件夹/ hello.py

def hello():
    print('Hello world in folder')

意见

如果我做

hello = importlib.import_module(‘hello’,package =’./’)或

hello = importlib.import_module(‘hello’)

它从根文件夹导入hello.py并打印hello world.

如果我做

hello = importlib.import_module(‘folder.hello’)

它从根文件夹导入文件夹/ hello.py并在文件夹中打印hello world.

但如果我这样做

hello = importlib.import_module(‘hello’,package =’folder’)或

hello = importlib.import_module(‘hello’,package =’./ folder’)

它给出了错误

Traceback (most recent call last):
  File "main.py",line 4,in <module>
    hello = importlib.import_module('hello',package='./folder')
  File "/usr/lib/python3.6/importlib/__init__.py",line 126,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "<frozen importlib._bootstrap>",line 994,in _gcd_import
  File "<frozen importlib._bootstrap>",line 971,in _find_and_load
  File "<frozen importlib._bootstrap>",line 953,in _find_and_load_unlocked
ModuleNotFoundError: No module named 'hello'

问题

我不确定这里发生了什么.我很确定我对python模块和包的理解有问题.有人可以解释为什么这是预期的行为?

解决方法

如果第一个参数,要导入的模块是绝对模块引用(没有前导.),则完全忽略SEOnd参数.

要将模块导入另一个模块b,您必须使用

a = importlib.import_module('.a',package='b')

在你的情况下,这应该工作

hello = importlib.import_module('.hello',package='folder')

根据经验,如果要将package用作第二个参数,则导入包应该有效.

from package import module

然后成为

importlib.import_module(module,package)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读