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。

相关推荐
_x_w1 小时前
【17】数据结构之图及图的存储篇章
数据结构·python·算法·链表·排序算法·图论
pianmian11 小时前
arcgis几何与游标(1)
开发语言·python
冬天vs不冷1 小时前
SpringBoot条件注解全解析:核心作用与使用场景详解
java·spring boot·python
nanzhuhe1 小时前
python中参数前**的含义
开发语言·python
hello_ejb32 小时前
聊聊Spring AI Alibaba的PdfTablesParser
windows·python·spring
Kairo_012 小时前
秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作
python
ghost1432 小时前
Python自学第2天:条件语句,循环语句
开发语言·python·学习
RunsenLIu2 小时前
基于Django实现的图书分析大屏系统项目
后端·python·django
小小福仔2 小时前
Python爬虫第四战(使用防盗链下载视频)
爬虫·python·音视频·反爬·防盗链referer
明月看潮生2 小时前
青少年编程与数学 02-016 Python数据结构与算法 23课题、分布式算法
分布式·python·算法·青少年编程·编程与数学