Python找不到项目模块解决方法

news/2024/10/22 1:07:43
  • BiliBili
  • VsCode在使用Python过程中遇到找不到项目模块的问题

问题描述

目录及代码

  • 如下的项目结构
demo
├─ main.py
└─ src├─ __init__.py├─ a.py└─ b.py
  • 在"src/a.py"文件中有一个方法,代码如下
def xxc():print("hello")
  • 在"src/b.py"和"main.py",调用"src/a.py"文件中的"xxc()"方法,代码如下
from src.a import xxcxxc()

报错内容

  • 打开"src/b.py"文件",点击VsCode右上角的执行按钮(Run Python File)运行代码
  • 报错如下
Traceback (most recent call last):File ".../demo/src/b.py", line 1, in <module>from src.a import xxc
ModuleNotFoundError: No module named 'src'
  • 使用命令行执行"src/b.py"文件呈现同样结果
$ python src/b.py
# Traceback (most recent call last):
#   File ".../demo/src/b.py", line 1, in <module>
#     from src.a import xxc
# ModuleNotFoundError: No module named 'src'
  • 但是执行根目录下的"main.py"文件(完全相同的代码),却没有任何问题
$ python main.py
# hello

原理及演示

  • VsCode的Python项目中,需要显式地声明"PYTHONPATH"环境变量
    • PYTHONPATH: 用于指定 Python 解释器在执行 import 语句时搜索模块或包的路径
  • 下面演示在命令行中,将"PYTHONPATH"环境变量设置为当前项目路径,解决报错问题

Windows(CMD)

  • 演示如下
    • 假设本项目根目录在"E:\code\demo"
# 查看当前目录
> cd
# E:\code\demo# 将"PYTHONPATH"设置为当前目录
> set PYTHONPATH=E:\code\demo# 执行"src/b.py"文件
> python src/b.py
# hello

Windows(powershell)

  • 演示如下
    • 假设本项目根目录在"E:\code\demo"
# 查看当前目录
> pwd
# Path
# ----
# E:\code\demo# 将"PYTHONPATH"设置为当前目录
> $Env:PYTHONPATH="E:\code\demo"# 执行"src/b.py"文件
> python src/b.py
# hello

Linux

  • 演示如下
    • 假设本项目根目录在"/home/xxc/code/demo"
# 查看当前目录
$ pwd
# /home/xxc/code/demo# 将"PYTHONPATH"设置为当前目录
$ export PYTHONPATH=/home/xxc/code/demo# 执行"src/b.py"文件
$ python src/b.py
# hello

VsCode解决方法

  • 在根目录下创建配置文件 ".vscode/settings.json",配置内容如下
    • 配置文件不存在,则手动创建
  • 这种方式仅对当前项目有效,想一劳永逸可以设置到全局配置中
{"terminal.integrated.env.windows": {"PYTHONPATH":"${workspaceFolder}"},"terminal.integrated.env.osx": {"PYTHONPATH":"${workspaceFolder}"},"terminal.integrated.env.linux": {"PYTHONPATH":"${workspaceFolder}"}
}
  • 重启VsCode,重新运行即可正常运行
    • 实际只需要重启命令行终端
$ python src/b.py
# hello

VsCode设置技巧

  • 设置页面可以看到两种级别配置
    • User: 用户(全局)配置
    • Workspace: 工作空间(项目)配置
  • 右上角有个图标,鼠标悬浮在图标上可以看到"Open Settings(JSON)",点击打开对应环境的配置文件
  • VsCode修改配置,实际就是在更新对应的"settings.json"文件
  • 两种级别的配置实际就是存放在不同位置的"settings.json"文件
    • User: 一般在用户目录(Windows一般在C盘)
    • Workspace: 就是当前项目的".vscode/settings.json"
    • 范围越小,配置优先级越高
  • 想要一劳永逸,可以将上述配置设置到User用户全局配置中

参考文章

  • 在VSCode的Python项目中正确地import同项目下其他package中的module
    • 重点:VsCode中需要显式地声明"PYTHONPATH"
    • 该文章中的设置方法较为曲折,不如上述方法方便

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

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

相关文章

循环结构程序设计

为什么需要循环控制 循环结构或称重复结构 几乎每一种计算机高级语言都提供了循环控制,用来处理需要进行的重复操作 大多数的应用程序都会包含循环结构 循环结构和顺序结构、选择结构是结构化程序设计的3中基本结构,它们是各种复杂程序的基本构成单元。 用 while 语句实现循环…

python 实现课堂练习

module.py中的:import math class Complex:def __init__(self,real=0,imag=0):self.real=realself.imag=imagdef add(self,other):if isinstance(other,Complex):self.real=self.real+other.realself.imag=self.imag+other.imag def output(other):if isinstance(other, Compl…

Portainer - 用于管理容器的 UI-k8s

简介 🔰什么是Portainer? Portainer 是一个开源的轻量级管理 UI,它允许我们在 Docker、Docker Swarm、Kubernetes 和 Azure ACI 中轻松构建和管理容器,例如管理 Swarm 服务的创建和删除、用户身份验证、授权、连接、执行命令运行容器的控制台,并查看容器的日志。 Portainer …

k8s-Portainer 让应用部署变得简单

什么是搬运工 Portainer 是一个 Kubernetes、Docker/Swarm 和 Nomad 通用容器管理系统,它简化了容器操作,因此我们可以更快地将软件部署到更多地方。 概述 Portainer 服务器和 Portainer 代理是 Portainer 的两个组件。两者都作为轻量级容器在您现有的容器化基础设施上运行。集…

2000+多种开源大模型随意部署!一键搭建本地大模型,不挑环境、不挑配置(ollama 安装部署教程《Windows/Linux,Mac》)

2000+多种开源大模型随意部署!一键搭建本地大模型,不挑环境、不挑配置(ollama 安装部署教程《Windows/Linux,Mac》) 一、Ollama介绍 2.1 基本介绍 Ollama是一个支持在Windows、Linux和MacOS上本地运行大语言模型的工具。它允许用户非常方便地运行和使用各种大语言模型,比如…

SPSS、R 语言因子分析FA、主成分分析PCA对居民消费结构数据可视化分析

全文链接:https://tecdat.cn/?p=37952 原文出处:拓端数据部落公众号 分析师:Ting Mei在经济发展的大背景下,居民消费结构至关重要。本文围绕居民消费结构展开深入研究,运用 SPSS25.0 和 R 语言,以因子分析法和主成分分析法对东北三省居民消费价格指数及全国城镇居民消费…

LLM学习-基础知识

NLP NLP代表自然语言处理,是关于计算机和人类语言之间交互的领域。NLP涵盖了一系列任务,包括文本处理、语音识别、语言翻译、信息检索等。NLP技术的发展使得计算机能够理解、解释和生成人类语言,促进了许多领域的发展,包括智能助手、文本分析、情感分析等。 LLM LLM指的是大…

Photoshop PS 免费安装使用2024 最新使用

传送门:https://pan.quark.cn/s/3166efc40518 ps:下载后解压就可使用在前端开发的过程中,设计师没有空的时候,或者独自在加班的时候,图像处理是一个不可避免的任务。无论是切图、调整图片尺寸,还是简单的修饰,掌握一款强大的图像编辑工具都是非常重要的。作为一名前端工…