在 python3 中使用 importlib 动态导入时出错

2024-03-19

我一直在尝试使用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')

观察结果

If I do

hello = importlib.import_module('hello', package='./') or

hello = importlib.import_module('hello')

它进口hello.py从根文件夹并打印hello world.

If I do

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

它进口文件夹/hello.py从根文件夹并打印hello world in folder.

但如果我这样做

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

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'

Problem

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


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

导入模块a相对于另一个模块b,你必须使用

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

对于你的情况,这应该有效

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

根据经验,import package如果你想使用应该可以package作为第二个参数。

from package import module

然后变成

importlib.import_module(module, package)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python3 中使用 importlib 动态导入时出错 的相关文章

  • dump() 缺少 1 个必需的位置参数:python json 中的“fp”

    我正在尝试美化 json 格式 但收到此错误 import requests as tt from bs4 import BeautifulSoup import json get url tt get https in pinterest
  • 将大型 Twitter JSON 数据 (7GB+) 加载到 Python 中

    我已经通过 AWS 设置了一个公共流来收集推文 现在想做一些初步分析 我的所有数据都存储在 S3 存储桶中 5mb 文件 我下载了所有内容并将所有文件合并为一个 每条推文都按照 Twitter 规范存储为标准 JSON 对象 基本上 合并的
  • pandas 数据框列表的列表列表

    我有一个列表的列表 最外层列表的长度为 20 单独的类别 中间列表的长度可变 时间戳列表 内部列表的长度为 5 分割每个时间戳 例如 sTimestamps 0 5 Tue Feb 7 10 06 30 2017 Tue Feb 7 10
  • 导入*包括子模块

    我有一个如下所示的目录结构 scripts init py filepaths py Run py domains init py topspin py tiles py hanoi py grid py 我想说 from scripts
  • 在unittest.main()之后执行命令

    我从另一个 Python 脚本调用以下脚本 测试 py 日志文件 它应该运行测试并将结果保存在日志文件中 但由于某种原因 之后的命令unittest main testRunner runner 没有被执行 我什至不确定文件写入后是否会关闭
  • Python列表内存存储[重复]

    这个问题在这里已经有答案了 据我了解 Python 列表本质上是 C 数组 它们分配特定的顺序内存块 但是 这些内存块实际上存储列表中的数据还是它们只是指向内存中存储实际数据的另一个位置 它可能取决于列表中存储的对象的大小吗 因为您可以轻松
  • python sqlite3从excel创建数据库

    我正在尝试从 Excel 电子表格创建数据库 我有下面的代码 问题是当我运行代码时 我的数据库为每列创建一个表 我想为工作簿中列出的每个电子表格创建一个表格 工作表名称为工作表 1 和工作表 2 import sqlite3 import
  • Pandas:如何根据另一个数据框的值对数据框上的列求和

    我是 Pandas 新手 我正在尝试做以下事情 我有一个名为的数据框comms包含articleID和commentScore列 等等 我有另一个名为arts带有列文章 ID 我需要创建arts一个名为文章评分 每篇文章必须具有articl
  • 为什么 enumerate、zip、range 类型不属于 types.GeneratorType?

    Python 3 引入了类似生成器的对象 在调用时返回range and zip 返回的对象就像一个生成器 可以迭代一次 但不能很好地 打印 就像enumerate 返回参数 然而 我很困惑地发现它们是不同的对象类型并且不属于types G
  • Python 3.10 中有 setUpClass 的异步等效项吗?

    我一直在使用unittest IsolatedAsyncioTestCase测试我的异步方法 我一直在利用setUpClass asyncSetUp创建夹具和asyncTearDown进行清理 到目前为止一切进展顺利 但现在我有一个新的要求
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • 在 python3 中优雅地退出多进程[重复]

    这个问题在这里已经有答案了 我想通过 Ctrl C SIGINT 或用户输入优雅地退出程序 如果可能的话 终端应该提示类似的内容 按 Enter 键终止 Python 3 6 执行的代码 def worker process i 0 whi
  • 如何将 AWS Kinesis Video Stream GetMedia API 输出解码为 mp3/wav?

    我现在使用 GetMedia API 通过 AWS Connect 服务将数据提取到 Kinesis Video Stream KVS 我能够提取Payload但如何将此输出转换为 mp3 wav 我想将此输出提取到 AWS Transcr
  • “ModuleNotFoundError:我的 Docker 容器中没有名为 的模块”

    我正在尝试在 Docker 容器中运行 python 脚本 但我不知道为什么 python 找不到任何 python 模块 我认为它与 PYTHONPATH 环境变量有关 所以我尝试将其添加到 Dockerfile 中 如下所示 ENV P
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 如何在Python中获取声音级别?

    对于我正在进行的项目 我需要获取麦克风的实时分贝级别 我见过阴谋家 Print out realtime audio volume as ascii bars import sounddevice as sd import numpy as
  • pandas 在单元格中缩写字典

    我有一个相当复杂的嵌套字典 它使用 pandas 很好地打印为 html 但是 有一个字典作为打印在单元格中的值之一 如下所示 pd set option display max colwidth 1 已设置 所以这不应该是问题 这是产生问
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 如何添加 id 列来标识 read_html() 表?

    考虑以下站点 site1 http pastebin com vpnGqn5X site2 http pastebin com FbAFGbfR site3 http pastebin com LqZWxFSP 其中有许多不同的表 我在用读

随机推荐