导入 micropython 中存在的模块时出现 ImportError

Posted

技术标签:

【中文标题】导入 micropython 中存在的模块时出现 ImportError【英文标题】:ImportError when importing modules that exist in micropython 【发布时间】:2022-01-04 14:56:11 【问题描述】:

我目前正在开展一个项目,该项目涉及使用传感器和安装在扩展板 V3.1 上的 Pycom LoPy4 进行土壤湿度测量。我目前正在使用 VS 代码作为我的 IDE,并使用 pymakr 扩展在我的板上运行 micropython。

在我的项目开始时,导入功能正常工作,我使用的是直接从互联网复制的代码,如下所示,它可以正常运行:

import time
from machine import Pin
from onewire import DS18X20
from onewire import OneWire

# DS18B20 data line connected to pin P10
ow = OneWire(Pin('P10'))
temp = DS18X20(ow)

while True:
    print(temp.read_temp_async())
    time.sleep(1)
    temp.start_conversion()
    time.sleep(1)

这将导入单线模块,传感器将进行温度测量。

快进到现在,由于我不知道的原因,每当我运行脚本时,我都会收到 ImportError:没有名为“onewire”的模块。然后我尝试在不同的项目上运行不同的库,这次尝试使用以下代码导入模块:

from lib import measureSensors
from lib import onewire;

运行此代码时,我得到了基本相同的错误 - ImportError: no module named 'lib.measureSensors'

我也尝试过使用__init__.py 方法,但这似乎也不能解决我遇到的问题。我在下面附上了我的项目树的图片。

奇怪的是,如果我在 pycharm 或 VS 代码中运行这些代码而不使用 pymakr 扩展,代码执行时不会出现任何错误。当在 pymakr 和 Lopy4 x 扩展板 V3.1 上运行代码时,问题就开始了。

如果有人能帮助我解决这个问题,我将不胜感激。

谢谢。

【问题讨论】:

这里很难提供答案,因为缺少关键信息;在项目根目录中启动 Python 且不对sys.path 进行任何修改时,from lib import onewire 之类的导入将起作用。 IE。如果我创建一个像你这样的项目树,cd 到根目录,那么这样的导入将起作用,我无法重现你的问题。可能最好退后一步,创建一个最小的示例(例如,您在其中 from lib import example 和 lib/example.py 的 main.py),它会产生问题并更新您的问题。 【参考方案1】:

您可以将目录添加到 python 用来查找模块并照常导入的 sys.path:

sys.path.insert(0, './lib')
import measureSensors
import onewire

您可以显式引用该模块:

import lib.measureSensors as measureSensors
import lib.onewire as onewire

【讨论】:

以上是关于导入 micropython 中存在的模块时出现 ImportError的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序包上传到 Play 管理中心时出现导入错误

导入我自己的模块时出现“ImportError: No module named...”

在 Next.js 中动态导入模块时出现“forwardRef”错误

导入 numpy 模块时出现 Python 错误 [重复]

在 Python 3 中使用导入的模块时出现范围错误

Python - 导入新模块时出现问题 - libgmail