Python:脚本与包在同一根目录下报错 ModuleNotFoundError: No module named ‘mymodule‘

❗❗chatgpt生成预警

问题

我的文件夹结构如下:

│── mymodule

│ ├── init .py

│ ├── script.py

│ ├── Constants.py

│── main.py

script.py 中,我导入Constants.py里的常数:from Constants import CONST1, CONST2

main.py 中,我在使用from mymodule.script import func时遇到报错:ModuleNotFoundError: No module named 'Constants'

解决方法

您遇到的问题可能是因为在Python中,模块的导入路径是相对于当前运行脚本的位置的。在您的情况中,main.py 试图导入 mymodule.script,而 mymodule.script又试图导入Constants

为了解决这个问题,您可以使用相对导入绝对导入方式:

  • 相对导入:在script.py中,您可以使用相对导入,如下所示:
python 复制代码
from .Constants import CONST1, CONST2

这将告诉Python在当前包(mymodule)下查找Constants模块。

  • 绝对导入:在script.py中,您可以使用绝对导入,如下所示:
python 复制代码
from mymodule.Constants import CONST1, CONST2

这将告诉Python明确从 mymodule 包中导入 Constants 模块。

无论您选择哪种方式,确保您的包和模块的相对结构是正确的,并且 main.py 位于与 mymodule 相同的根目录中。这样,您就不会遇到ModuleNotFoundError的问题。

如果main.py不位于与mymodule相同的根目录中怎么办

如果main.py不位于与mymodule相同的根目录中,您需要确保Python能够找到mymodule模块。有几种方法可以解决这个问题:

  1. 将包含mymodule的目录添加到sys.path:
    在my_script.py的开头,您可以添加以下代码:
python 复制代码
import sys
import os

module_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'mymodule'))
sys.path.append(module_dir)

这将告诉Python在module_dir中查找mymodule包。

  1. 使用相对导入:

    如果您的项目结构允许,您可以使用相对导入。假设您的my_script.py位于与mymodule相同的根目录下,您可以像之前建议的一样使用相对导入。

  2. 设置PYTHONPATH环境变量:

    您还可以通过设置PYTHONPATH环境变量来告诉Python在哪里查找模块。在命令行中执行以下命令:

bash 复制代码
export PYTHONPATH=/path/to/your/root/directory:$PYTHONPATH

或者在Windows命令行中:

batch 复制代码
set PYTHONPATH=C:\path\to\your\root\directory;%PYTHONPATH%

这将允许Python在指定的根目录下查找模块。

选择其中一种方法来适应您的项目结构和需求,以确保Python可以正确找到mymodule。

相关推荐
好运的阿财1 分钟前
OpenClaw工具拆解之 sessions_list+sessions_history
人工智能·python·程序人生·ai·ai编程·openclaw
Ulyanov2 分钟前
打造现代化雷达电子对抗仿真界面 第三篇:综合电子战指挥控制台——多视图协同与插件化架构
python·架构·系统仿真·雷达电子战
杜子不疼.2 分钟前
Python + AI 实战:用 LangChain 搭建企业级 RAG 知识库
人工智能·python·langchain
无敌昊哥战神4 分钟前
【算法与数据结构】深入浅出回溯算法:理论基础与核心模板(C/C++与Python三语解析)
c语言·数据结构·c++·笔记·python·算法
甄心爱学习4 分钟前
【项目实训(个人3)】
vue.js·人工智能·python·个人开发
平安的平安7 分钟前
MCP 协议实战:用 Python 开发你的第一个 AI 工具服务
网络·人工智能·python
宸津-代码粉碎机10 分钟前
Spring Boot 4.0 进阶实战+源码解析系列(持续更新)—— 从落地到源码,搞定面试与工作
java·人工智能·spring boot·后端·python·面试
Z.风止11 分钟前
Large Model-learning(4)
人工智能·pytorch·笔记·python·深度学习·机器学习
不知名XL14 分钟前
day02 mcp开发以及skill开发规范
python
好家伙VCC2 小时前
**神经编码新视角:用Python实现生物启发的神经信号压缩与解码算法**在人工智能飞速发展的今天
java·人工智能·python·算法