【树莓派】解密树莓派Python项目中神秘的导入错误(`ModuleNotFoundError : No module named ‘Motor‘)

文章目录

  • 问题导入
  • python文件目录分析
  • 解决方案

问题导入

  小编在使用树莓派编写python项目时出现了以下两种错误:

  • ModuleNotFoundError : No module named 'Motor'

  • from ..hardware.motor import Motor portError: attempted relative import with no known parent package
    【树莓派】解密树莓派Python项目中神秘的导入错误(`ModuleNotFoundError : No module named ‘Motor‘)_第1张图片

  这小编就非常好奇了,因为项目首先是在windows下的Pycharm编写完成,但是放入树莓派的命令行中运行时就出现这两种错误(windows与树莓派的python版本一致),一时间让小编不知所措。

python文件目录分析

  树莓派可以使用文件夹来对项目中的.py文件进行分类,这样可以更好地组织和管理代码。一般来说,我们可以在项目根目录下创建一个名为"src"的文件夹,并将项目中的所有.py文件放入其中。这个文件夹可以进一步划分为子文件夹,每个子文件夹代表一个模块或一个功能。例如,一个树莓派的项目可能包括一个名为"sensor"的子文件夹,里面放置与传感器相关的.py文件。同时我们可以在文件夹中添加一个__init__.py文件来表示这是一个Python模块。

  例如:

project/
├── src/
│   ├── __init__.py
│   ├── main.py
│   ├── sensor/
│   │   ├── __init__.py
│   │   ├── sensor_1.py   
│   │   ├── sensor_2.py
│   ├── data_processing/
│   │   ├── __init__.py
│   │   ├── data_processing_1.py
│   │   ├── data_processing_2.py

  在这个例子中,我们在项目根目录下创建了一个名为"src"的文件夹,里面包括了一个main.py文件和两个子文件夹sensordata_processingsensor文件夹中包含了用于传感器操作的两个.py文件,data_processing文件夹中包含了用于数据处理的两个.py文件。在每个文件夹中,我们可以使用__init__.py文件来说明这是一个Python模块。这样,我们就可以在main.py中使用import来导入这些模块和模块中的函数了。

解决方案

  项目目录展示

|------------------dataModule
|-------------------------------data1.dat
|------------------test
|-------------------------------motor_test.py
|------------------hardware
|-------------------------------__init__.py
|-------------------------------hardware.py

  在树莓派的命令行中无法识别 motor_test.py 文件中的 import 语句,可能是因为 Python 无法确定项目根目录的位置并正确解析相对路径。

法一:
  一种简单的方法是使用 PYTHONPATH 环境变量。这个环境变量告诉 Python 解释器在哪里搜索模块。你可以在树莓派的命令行中执行以下命令来设置该环境变量:

export PYTHONPATH=/path/to/project/root

  将 /path/to/project/root 替换为你项目的根目录路径。这样 Python 就可以在搜索模块时包括该路径了。

法二:
  另一种方法是将项目根目录添加到 Python 的模块搜索路径中,就像上面示范的那样。你可以在树莓派的命令行中执行以下命令来进入项目根目录:

cd /path/to/project/root

  然后你可以在 motor_test.py 文件中使用以下代码来导入 Motor 类:

import sys
import os

# 将当前目录添加到模块搜索路径中
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# 导入 Motor 类
from hardware.motor import Motor

  这段代码的作用是将当前目录添加到 Python 的模块搜索路径中。它使用 os.path.dirname(__file__) 函数获取当前文件所在的目录路径,并将该路径添加到 sys.path 列表的最前面。这样 Python 解释器就可以查找和导入该路径下的模块文件了。

你可能感兴趣的:(树莓派,python,开发语言)