文章目录
- 问题导入
- python文件目录分析
- 解决方案
问题导入
小编在使用树莓派编写python项目时出现了以下两种错误:
-
ModuleNotFoundError : No module named 'Motor'
-
from ..hardware.motor import Motor portError: attempted relative import with no known parent package
这小编就非常好奇了,因为项目首先是在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
文件和两个子文件夹sensor
和data_processing
。sensor
文件夹中包含了用于传感器操作的两个.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 解释器就可以查找和导入该路径下的模块文件了。