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

news2025/1/12 16:17:28

文章目录

  • 问题导入
  • 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.coloradmin.cn/o/700961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】手把手带你解决青蛙跳台阶问题

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,今天更新的是经典递归问题——青蛙跳台阶,在所有有关递归的问题中,青蛙跳台阶是最广为人知的问题之一,可以说,如果你能真正弄懂青蛙跳台阶问…

javaweb学习2

p标签使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!--p标签定义段落 p元素自动在其前后创建一段空白--> hello&#xff0c;world &l…

电脑鼠标怎么改变形状

电脑鼠标怎么改变形状? 首先你要下载一个鼠标指针包&#xff0c;网上有很多这样的资源&#xff0c;选择你喜欢的那一个指针包。 点击开始菜单&#xff0c;找到控制面板&#xff0c;打开控制面板。 从控制面板里点击“硬件和声音”&#xff0c;在设备和打印机里面点击“鼠标”。…

1-Eureka服务注册与发现以及Eureka集群搭建(实操型)

1-Eureka服务注册与发现以及Eureka集群搭建&#xff08;实操型&#xff09; 1. 简单搭建微服务框架1.1 idea创建maven多模块项目1.2 项目结构1.3 项目依赖与配置1.3.1 父工程&#xff1a;dog-cloud-parent1.3.2 管理实体项目&#xff1a;dog-po1.3.3 服务提供者&#xff1a;dog…

HBase(9):过滤器

1 简介 在HBase中,如果要对海量的数据来进行查询,此时基本的操作是比较无力的。此时,需要借助HBase中的高级语法——Filter来进行查询。Filter可以根据列簇、列、版本等条件来对数据进行过滤查询。因为在HBase中,主键、列、版本都是有序存储的,所以借助Filter,可以高效地…

主流开源深度学习框架简介

主流开源深度学习框架简介 本文目录&#xff1a; 一、TensorFlow深度学习框架 二、PyTorch深度学习框架 三、Keras深度学习框架 四、Caffe深度学习框架 五、中国深度学习开源框架状况 六、几种框架的对比 七、其他统计数据 当下&#xff0c;有许多主流的开源深度学习框架…

mysql 模糊查询的字段 支持不区分大小写功能

1. 直接修改字段对应的校对规则即可 ​​​​​​ 2. 校对规则说明 ​ utf8_bin 将字符串中的每一个字符用二进制数据存储&#xff0c;区分大小写。 utf8_genera_ci 不区分大小写&#xff0c;ci为case insensitive的缩写&#xff0c;即大小写不敏感。utf8_general_cs 区分…

香蕉派BPI-R4 Wifi7路由器采用联发科MT7988A (Filogic 880)设计

香蕉派BPI-R4路由器板采用联发科MT7988A (Filogic 880)四核ARM Corex-A73方案设计&#xff0c;板载4GB DDR4内存,8GB eMMC存储,128MB SPI-NAND闪存&#xff0c;还具有2个10Gbe SFP光电口, 4x Gbe千兆网口&#xff0c;带USB3.2端口&#xff0c;M.2接口支持4G/5G/NVME SSD.2x min…

海外版“咸鱼”Carousell是什么?

做跨境的都知道&#xff0c;一定不能只在一颗树上吊死&#xff0c;潮流总是把你推着向前的&#xff0c;现在跨境电商平台一样层出不穷。今天就来跟大家分享最近发现比价好做的外贸电商平台APP——Carousell。号称海外版“咸鱼”&#xff0c;它的功能也与咸鱼是差不多的&#xf…

群晖ssh登录并开启root用户登录功能

说明 群辉默认不允许SSH使用ROOT远程登陆&#xff0c;只能用手动创建的账户登陆&#xff0c;需要拷贝破解文件的时候会提示权限不足&#xff0c;这个时候肯定需要通过root用户去登录靠北 启动ssh登录功能 双击控制面板 点击终端和SNMP 启用ssh和telnet 点击应用 finalshel…

SpringBoot入门:使用IDEA构建第一个SpringBoot项目

SpringBoot框架介绍 Spring Boot是一个简化Spring开发的框架&#xff0c;用来监护spring应用开发&#xff0c;约定大于配置&#xff0c;去繁就简&#xff0c;just run 就能创建一个独立的&#xff0c;产品级的应用。我们在使用Spring Boot时只需要配置相应的Spring Boot就可以…

编译原理三:词法分析

概念 在编译器工作流程中&#xff0c;词法分析是将源代码分解为一系列词法单元的过程。 词法单元包括标识符、关键字、运算符等。词法分析器会读取源代码的每一个字符&#xff0c;根据预定义的规则将它们组成一系列词法单元。 词法分析器通常使用有限状态机来实现。有限状态机…

如何解决在vue3+vite项目中加载不了.tga文件的问题

因项目需求所以需要加载 .tga 类型的文件 import backgroundImage from "/assets/combined_image.tga" import { TGALoader } from "three/addons/loaders/TGALoader.js";const loader new TGALoader(); const texture1 loader.load(backgroundImage);但…

操作系统5:线程的概念和线程实现

目录 1、线程的概念 &#xff08;1&#xff09;进程和进程并发是所需要付出的时空开销 &#xff08;2&#xff09;线程和进程的比较 &#xff08;3&#xff09;线程的状态和线程的控制块 2、线程的实现 &#xff08;1&#xff09;线程的实现方式 &#xff08;2&#xff…

2.编程语言的代码规则和规范

**格式和规范**只需要记住最原始的c和c的语言规则就可以了不要把所有的方法都掌握了 比如孔乙己 每个语法之间要有空格或分隔符 2。“”英文双引号里面是不需要的&#xff0c;这个双引号里面输入什么都可以 3.预处理的命令 必须一条占一行

传统美业如何拓客引流?如何借力小程序实现低成本引流与锁客

​传统门店的经营方式主要靠广告投入和口碑传播&#xff0c;然而&#xff0c;门店客流寥寥无几&#xff0c;如今&#xff0c;移动互联网时代&#xff0c;新零售的盛行&#xff0c;传统实体门店急需转型&#xff0c;接轨新的商业营销模式来为门店引流。 处在小程序爆发的风口&a…

《PyTorch深度学习实践》第四讲 反向传播

b站刘二大人《PyTorch深度学习实践》课程第四讲反向传播笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p4&vd_sourceb17f113d28933824d753a0915d5e3a90 对于上述简单的模型可以用解析式来做&#xff0c;但是对于复杂模型而言&#xff0c;如下图每个…

详解线程池的作用和实际应用以及拒绝策略

目录 线程池的作用&#xff1f; 线程池的意义&#xff1a; 线程池的参数 ​编辑 线程池任务执行的顺序 线程池拒绝策略 四种策略 应用场景分析 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 线程池的作用&#xff1f; 优化系统架构通常包括在时间…

亚马逊平台买家注册流程

在亚马逊平台注册买家号是比较简单的。以下是亚马逊买家注册流程&#xff1a; 1、打开亚马逊网站&#xff1a;访问亚马逊的官方网站&#xff0c;如果要注册美国买家号&#xff0c;那么网址就是www.amazon.com。 2、点击"注册"&#xff1a;在亚马逊首页的右上角&…

LLM - 搭建 ProteinGPT 结合蛋白质结构 PDB 知识的行业 ChatGPT 系统

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131403263 论文&#xff1a;ProteinChat: Towards Enabling ChatGPT-Like Capabilities on Protein 3D Structures 工程&#xff1a;ht…