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

Python跨模块导入遇ModuleNotFoundError,多种尝试无效求助

Python跨模块导入问题解决方案(Windows 10 + VS Code + Python 3.11.4)

项目结构确认

test/
│   
├───demoA
│       test1.py
│       __init__.py
│       
└───demoB
        test2.py
        __init__.py

test1.py内容:

def hello():
  print("hello")

以下是三种经测试有效的解决方案:

方法一:临时修改sys.path(无需额外配置)

在test2.py开头添加代码,将项目根目录(test文件夹)加入Python的模块搜索路径,之后即可正常导入:

import sys
import os

# 获取当前脚本所在目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 向上一级找到项目根目录
root_dir = os.path.dirname(current_dir)
# 加入sys.path
sys.path.append(root_dir)

# 导入并调用函数
from demoA.test1 import hello
hello()

直接运行test2.py即可输出hello。

方法二:配置VS Code全局PYTHONPATH(永久生效)

  1. 在项目根目录(test文件夹)下创建.vscode文件夹,新建settings.json文件,写入:
{
    "python.analysis.extraPaths": ["${workspaceFolder}"],
    "python.envFile": "${workspaceFolder}/.env"
}
  1. 在test根目录创建.env文件,写入:
PYTHONPATH=${PYTHONPATH};${WORKSPACE_FOLDER}
  1. 重启VS Code,在test2.py中直接使用绝对导入:
from demoA.test1 import hello
hello()

后续该项目内所有脚本都能直接识别根目录下的包。

方法三:相对导入(需按包模块方式运行)

相对导入仅能在包结构内生效,不能直接运行test2.py,需通过模块方式启动:

  1. 修改test2.py内容为:
from ..demoA.test1 import hello
hello()
  1. 打开命令行,切换到test文件夹的上级目录(比如test在D:\code下,就进入D:\code)
  2. 执行命令:
python -m test.demoB.test2

通过-m参数将test2.py作为包的一部分执行,此时相对导入的路径关系会被正确识别。

注意事项

  • 确保每个包目录下的__init__.py文件存在且未被误删(你的项目已满足)
  • 不要使用与Python标准库重名的模块名(比如避免命名为os.py、sys.py)
  • 确认VS Code使用的Python解释器是你配置的3.11.4版本(可通过左下角状态栏切换)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:48:11