You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python误将文件夹识别为模块?项目内部导入问题求解

解决Python包导入报错ModuleNotFoundError: No module named 'project'的方案

问题原因

直接运行folder1/script时,Python会将script所在的folder1目录加入模块搜索路径sys.path,而非project的父目录。此时Python无法找到project包,因为它不在搜索路径范围内。而在项目外导入script时,project的父目录已经处于sys.path中(当前工作目录为该父目录),所以导入逻辑正常。

解决方案

1. 动态添加项目路径到sys.path

在script开头添加代码,手动将project目录加入Python的模块搜索路径:

import sys
from pathlib import Path

# 获取project目录的绝对路径(folder1的父目录即为project)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

# 现在可以正常执行导入
from project.folder2 import some_file as file

2. 使用相对导入+模块模式运行

由于script属于project包的子模块,可使用相对导入语法:

from ..folder2 import some_file as file

但直接运行script会触发ValueError: attempted relative import in non-package,需在project的父目录下,用-m参数以模块方式运行脚本:

python -m project.folder1.script

这种方式会让Python将project识别为合法包,相对导入可正常工作。

3. 设置PYTHONPATH环境变量

运行脚本前,将project的父目录添加到PYTHONPATH环境变量中:

  • Linux/macOS终端:
    export PYTHONPATH="/path/to/project_parent_dir:$PYTHONPATH"
    python /path/to/project/folder1/script
    
  • Windows命令行:
    set PYTHONPATH=C:\path\to\project_parent_dir;%PYTHONPATH%
    python C:\path\to\project\folder1\script
    

Python启动时会自动加载该路径,无需修改代码即可找到project包。

导入folder_3内容的方法

解决project包的搜索路径问题后,导入folder_3的方式与导入some_file一致,无需特殊处理:

  • 绝对导入(适用于所有解决方案):
    # 导入folder_3中的某个模块
    from project.folder2.folder_3 import target_module
    # 或直接导入模块内的对象
    from project.folder2.folder_3.target_module import some_class
    
  • 相对导入(仅适用于模块模式运行):
    from ..folder2.folder_3 import target_module
    

内容的提问来源于stack exchange,提问作者Chompy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:43:14