【树莓派】解密树莓派Python项目中神秘的导入错误

文章目录

  • 问题导入
  • 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文件和两个子文件夹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 解释器就可以查找和导入该路径下的模块文件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 进阶(三):Python使用ORM框架SQLAlchemy操作Oracle数据库

Python使用ORM框架SQLAlchemy操作Oracle数据库 前言1. 安装Oracle Instant Client2. 安装依赖库3. 导入模块并创建引擎4. 操作oracle数据库4.1 新增数据4.2 查询数据4.3 更新数据4.4 删除数据 前言 要详细连接Oracle数据库并使用SQLAlchemy进行操作,按照以下步骤进…

欧科云链在GEF论坛发起圆桌:监管科技与Web3合规发展图景与展望

6月15日,欧科云链在格林威治经济论坛发起了一场题为“监管科技与Web3合规发展图景与展望”的圆桌会议,此次会议由中国香港贸易发展局副执行董事PatrickLau博士主持。Stratford Finance首席执行官Angelina Kwan,BC科技集团有限公司董事会副主席…

【spring cloud学习】4、创建服务提供者

注册中心Eureka Server创建并启动之后,接下来介绍如何创建一个Provider并且注册到Eureka Server中,再提供一个REST接口给其他服务调用。 首先一个Provider至少需要两个组件包依赖:Spring Boot Web服务组件和Eureka Client组件。如下所示&…

功能测试的技术

目录 前言: 1) 基于最终用户/系统测试 2) 等价测试 3) 边界值测试 4) 基于决策的测试 5) 备用流量测试 6) 临时测试 前言: 功能测试是软件测试中最常见的一种测试类型,它旨在验证系统的功能是否符合设计要求和预期行为。在进行功能测…

HackTheBox - 学院【CPTS】复习1 - PASSWORD ATTACKS

前言 有一个月时间没发文章了,我在6月11号进入htb学院学习CPTS,在扎实的THM基础的加持下,我学的非常顺利,其实大部分内容都相当于复习,而学到的内容只是一些可能不太常见、又或者非常细节的小技巧,这也是非…

【Visual Studio】Qt 获取系统时间,并实时更新时间,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个需求来源于这个工程:【Visual Studio】Qt 的实时绘图曲线功能,使用 C 语言,配合 Qt 开发串口通信界面。 文章目录 Qt…

PHP 税务申报征收系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 税务申报征收系统 是一套完善的WEB设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/87959340https://downl…

【数据库】MySQL主从同步失败或重启后需要重新配置同步,主从同步延迟解决方案,mysql主从同步加速

最近在学习MySQL,主从同步方案。由于是新手,如有出现错误的地方,请大家谅解并留言指正。MySQL不同的版本配置稍有不同,最新版本8.0.27是默认开启binarylog的,见下图 查询MySQL信息 SELECT version,NOW() ;show variabl…

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

uni-app uni.switchTab和uni.reLaunch跳转tabbar页面

uni.switchTab: 跳转列表不会刷新 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 uni.reLaunch: 跳转列表会刷新 关闭所有页面,打开到应用内的某个页面。(可以跳转到tabBar 页面) 但如果是列表的自定…

CSS盒子模型

盒子模型 盒子模型盒子模型的介绍content内容区域的宽度和高度边框( border )内边距( padding )外边距(margin)盒子模型示例 盒子模型 目标:能够认识 盒子模型的组成 **,**能够掌握…

windows -- 自动安装python包,并启动服务

文章目录 定制python的包编写批处理文件遇到的问题 自动安装python的包,并启动后台服务进程。 定制python的包 基于python的Flask框架,简单开发一个服务器;编写发布python包的setup.py 在my_ff包的同级目录下创建一个setup.py&#xff0c…