目录结构
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("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_unlockedModuleNotFoundError: 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)总结
以上是内存溢出为你收集整理的python-3.x – 在python3中使用importlib进行动态导入时出错全部内容,希望文章能够帮你解决python-3.x – 在python3中使用importlib进行动态导入时出错所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)