Vscode运行Python无法导入自己编写的包的解决方法

前言

在Vscode编辑器中,我经常用于编写Python代码,这一过程中,无论是导入第三方包还是Python内置的包,都未曾遇到过任何问题。然而,当我尝试导入一个跨文件自定义的包时,却遭遇了导入异常的问题。这一经历促使我撰写本文,希望通过分享解决这一问题的方法,帮助遇到类似问题的开发者。以及我觉得“包”这个称呼,不太贴切我们日常使用操作系统的习惯,因此后面我都会称呼为“文件夹”

作者所使用的平台

  • Vscode编辑器

  • python3.8.10

  • venv虚拟环境

存在的问题

导入模块时,可以看到编辑器并没有给出任何的报错
在这里插入图片描述

但是运行cluster.py的时候,出现了下面的错误

Traceback (most recent call last):File "d:\z资料\s数学建模\MathModels\Models\cluster.py", line 6, in <module>from DataProcess.decomposer import PCA
ModuleNotFoundError: No module named 'DataProcess'

通过查看文件树,可以看到DataProcess 是一个文件夹,cluster.py所在的文件夹ModelsDataProcess文件夹是属于同级文件夹
在这里插入图片描述

这里有个知识点,是你必须知道的,Python在导入包的时候,会对包所在的路径进行搜索,并且这个搜索是有优先级的

  1. 当前目录:Python首先检查当前的工作目录。
  2. PYTHONPATH:这是环境变量,包含了一系列目录路径,Python会在此查找。
  3. 安装的第三方库:Python会检查在site-packages目录下的第三方库。
  4. Python标准库:最后,Python会检查内置的标准库。

这个顺序确保了本地目录的优先级最高,然后是用户自定义的路径,接着是第三方库,最后是Python的标准库。这样做可以避免本地目录下的模块与标准库或第三方库中的模块发生命名冲突。

从上面的优先级可以看到,我们之所以会出现ModuleNotFoundError: No module named 'DataProcess',是因为我们导入的包的位置不符合上述四个当中的任意一个,因此Python解释器在解释代码的时候就无法找到我们自定义的包。

解决的方法

根据上述讲到的问题,我们简单分析一下,既然Python解释器无法找到我们自定义的包,那么就由我们自己告诉Python解释器,我们自定义的包在什么地方不就行了?😈😈这里可以使用.pth文件来手动指定Python搜索包的路径

在Python中,.pth文件是一种文本文件,它包含了一行一行的目录路径。这些路径会被Python解释器识别,并将其添加到模块搜索路径中。通过使用.pth文件,我们可以轻松地自定义Python模块的路径,方便地添加第三方库或自己编写的模块。所以.pth文件就提供给了我们除了上面四种搜索方法的额外拓展的办法。

  1. 找到site-packages文件夹

这个文件夹一般是用来存放第三方库的位置,我们可以利用这个文件夹,他通常都会在python解释器的Lib目录下,比如本文用的是venv虚拟环境,这个文件夹都位于.venv\Lib\site-packages

  1. 在site-packages文件夹下新建一个mypath.pth文件

这个文件名是任取的,不一定非得叫mypath

  1. 在mypath.pth文件写入自定义包的路径

拿我自己的项目举例,你只需要在mypath.pth文件中填写项目根目录文件夹的路径就行了,如下图所示

ps:这里推荐用绝对路径,当然用相对路径也是可以的
在这里插入图片描述

在这里有一个非常容易出现的误区,有些人可能会心想,既然导入的是DataProcess包(文件夹),那么为什么不直接填写DataProcess包(文件夹)的路径呢(如下图所示)?事实上,这种想法是错误的,在路径搜索中python解释器会将一个包(文件夹)当成一个整体看待,因此你给出的路径得是这个包的根目录才行。
在这里插入图片描述

运行结果

一切都顺利的话,我们再次重新运行cluster.py,应该就不会再次出现导入出错的情况了
在这里插入图片描述

如何你执行完以上的步骤后,仍然会导入异常,可能有以下的原因

  • 缓存没有清空
  • .pth文件放错位置了
  • 路径没有写对

可以尝试清空缓存试试,按下ctrl+shift+p,输入python,找到下面的选项
在这里插入图片描述

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

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

相关文章

【例题】lanqiao153 洁净数

解题思路 通过枚举1-n的数&#xff0c;判断其是否为洁净数求解。 洁净数的判断&#xff1a;i%102判断此时的个位是不是2&#xff0c;ii//10把前一位移动到个位 # 小明非常不喜欢数字 2&#xff0c;包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2&#xff0c;…

C++中的容器——vector

1. vector的介绍 vector&#xff1a;vector的底层实际上就是一个数组&#xff08;也称为顺序表&#xff09;&#xff0c;数据是连续存储在数组中的&#xff0c;因此vector是可以使用下标来进行访问的&#xff0c;但是它的大小并不是像数组一样是固定的&#xff0c;而是可以动态…

java基础知识20 Intern方法的作用

一 Intern方法作用 1.1 Intern方法 1.在jdk1.6中&#xff1a; intern()方法&#xff1a;在jdk1.6中&#xff0c;根据字符串对象&#xff0c;检查常量池中是否存在相同字符串对象 如果字符串常量池里面已经包含了等于字符串X的字符串&#xff0c;那么就返回常量池中这个字符…

从零开学C++:多态

引言&#xff1a;在我们去购买汽车票的时候&#xff0c;我们总会遇到成人全价&#xff0c;学生打折的情况。不同的对象&#xff08;成人、学生&#xff09;进行同一操作&#xff08;购买车票&#xff09;&#xff0c;得到不同的结果&#xff08;全价、打折&#xff09;&#xf…

2024年CAD图纸加密软件|加密图纸软件推荐:10款高效CAD加密软件

在当今数字化时代&#xff0c;CAD图纸已成为工程设计、建筑规划、机械制造等领域不可或缺的重要文件。然而&#xff0c;随着数据泄露和信息安全问题的日益严重&#xff0c;保护CAD图纸的安全性变得尤为重要。为了确保设计数据的安全&#xff0c;使用高效的CAD图纸加密软件成为了…

Stack类:常见方法讲解、使用场景、底层实现及算法问题

Stack 类是 Java 集合框架中的一个经典类&#xff0c;用于实现后进先出&#xff08;LIFO, Last In First Out&#xff09;数据结构。虽然 Stack 类作为一种直接的堆栈实现存在&#xff0c;但在开发中&#xff0c;Deque 或 LinkedList 更常被推荐用于堆栈的实现。不过&#xff0…

为什么说Claude3.5 sonnet好于GPT4O?实为网友们的无耐选择

引言 写作时&#xff0c;选择合适的工具就像船长选择航行的船只。语言模型作为目前最流行的技术工具之一&#xff0c;涉及每个人的生活与工作。Claude和GPT-4o是两款备受关注的语言模型&#xff0c;许多人自然而然地将二者进行比较&#xff0c;认为Claude更优。然而&#xff0…

时间复杂度计算 递归(solve2 后续)

原帖 最近校内比较忙&#xff0c;更新缓慢&#xff0c;致歉。 这里函数每次都需要遍历 h h h 和 m m m 之间的数&#xff08;复杂度 O ( n ) O(n) O(n)&#xff09;&#xff0c;所以和 solve1 略有不同。仍然假设 T ⁡ ( n ) \operatorname{T}(n) T(n) 表示 m − h 1 n…

python五子棋之对战项目源码【免费】

五子棋之对战项目是一种基于五子棋游戏规则的在线或本地对战项目。五子棋作为一种两人对弈的纯策略型棋类游戏&#xff0c;具有简单易学、策略性强的特点&#xff0c;因此非常适合作为对战项目的核心玩法。这个项目源码是使用Python编程语言实现的 源码下载地址&#xff1a; …

STL相关简介

string 看到这个词&#xff0c;相信大家一定都很好奇什么是string&#xff0c;它有什么作用呢&#xff1f;今天&#xff0c;就让我们一起来了解一下关于string的简介吧~ 目录 string 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的…

【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救

一、问题描述 有些时候会遇到3D打印机没料但机器还在继续打、掉电重启后未正常恢复打印、挤出机端没有料但断料检测未触发等情况。我们又不想打印放弃&#xff0c;但又想继续之前的进度打印。 这时候我们需要更改3D打印文件的切片参数来进行继续打印。 图中问题&#xff1a;可…

知识图谱与异构图神经网络(7)--1

知识图谱是由实体(节点)和关系( 不同类型的边) 组成的多关系图。作为一种非常重要又特殊的图结构数据&#xff0c;知识图谱被广泛应用在人工智能和自然语言处理领域&#xff0c;从语义解析、命名实体消歧到问答系统、推荐系统中都可以看到来自知识图谱的技术推动。本质上&#…

微服务下设计一个注解标识是否需要登录

需求 现在我们是微服务系统&#xff0c;需要设计一个注解 RequiredLogin &#xff0c;当标识这个注解时表示系统需要登录才能继续操作。 实现思路 首先&#xff0c;需要明确我们要拦截的是从浏览器过来的请求&#xff0c;服务之间的互相调用是不需要拦截的&#xff08;比如 …

【python设计模式1】面向对象设计原则

目录 设计模式分类 面向对象 接口 面向对象设计原则 里氏替换原则 依赖倒置原则 接口隔离原则 单一职责原则 设计模式是对软件设计中普遍存在或反复出向的各种问题所提出的解决方案。每一个设计模式系统地被命名、解释和评价了面向对象系统中一个重要和重复出现的设计。…

基于MicroPython的ESP32控制LED灯闪烁设计方案的Wokwi仿真

以下是一个基于MicroPython的ESP32控制LED灯闪烁设计方案的Wokwi仿真&#xff1a; 一、硬件准备&#xff1a; 在Wokwi仿真平台(https://wokwi.com/)选择ESP32开发板&#xff0c;添加一个LED灯&#xff0c;和一个220欧姆限流电阻。 二、硬件连接&#xff1a; 1. 将LED灯的阳极…

【例题】lanqiao4403 希尔排序模板题

插入排序每次只能将数据移动一位。 已知插入排序代码为&#xff1a; def insert_sort(a):for i in range(1,len(a)):ji-1while j>0 and a[j]>a[i]:a[j1]a[j]j-1a[j1]a[i]return a希尔排序在插入排序的基础上&#xff0c;将数据移动n/2,n/4,…,1位。 for i in range(ga…

Git:Git管理

目录 Git 文件管理检测文件状态 status跟踪新文件 add提交更新 commit撤销提交 Commit Git 校验和历史查看 log版本回退 resetgit 忽略文件 Git 分支管理Git 提交对象Git master分支Git 分支管理本地分支管理远程分支管理分支hotfix处理 Git 工作流常见分支冲突处理分支合并冲突…

冒泡排序的C++语言实现(不用std::sort)

自己写一个冒泡排序的代码。 void vSort(std::vector<int> & vec, bool bDescending) {//冒泡排序int iTail vec.size()-1;while(iTail > 0){for(int k 0; k < iTail; k){int f1 vec.at(k);int f2 vec.at(k1);if(f1 < f2){//默认是降序int iTmp vec.a…

第十一章 【后端】商品分类管理微服务(11.3)——商品管理模块 yumi-etms-goods

11.3 商品管理模块 yumi-etms-goods 新建 yumi-etms-goods 模块 添加依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns&#

ESP32工程添加.c .h文件及常见错误

一、编译环境添加 如果编译的文件在main文件夹下&#xff0c;在main文件夹下的CMakeLists.txt中添加对应的.c文件&#xff0c;如下图所示。 二、常见问题 1- undefined reference to xxx C语言中使用static修饰函数时&#xff0c;意味着该函数的作用域仅限于定义它的文件。…