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

为何VSCode中不同目录Python文件导入general.py的方式不同?

问题原因及解决办法

核心原因:脚本运行时的工作目录差异

你遇到的问题本质是不同文件夹下的脚本运行时,Python的模块搜索路径(sys.path)不一样:

  • 运行telefone里的文件时,VSCode默认工作目录是项目根目录(根目录会自动加入sys.path),所以能直接找到general.py所在位置;
  • 运行rotinas里的文件时,工作目录变成了rotinas文件夹本身,此时general.py所在目录不在sys.path里,自然找不到模块。

为什么加__init__.py没用?

__init__.py的作用是把文件夹标记为Python包,但它不会自动把这个文件夹加入sys.path。你之前用的是直接import general的导入方式,而非通过包路径导入(比如from settings import general),所以即使加了__init__.py,只要目标文件夹不在sys.path里,Python还是找不到模块。

解决办法

1. 统一运行时的工作目录(最推荐)

在VSCode里配置脚本运行时的工作目录为项目根目录:

  • 打开「运行和调试」面板,点击「创建launch.json文件」并选择Python环境;
  • 将配置修改为如下内容:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "cwd": "${workspaceFolder}",
            "console": "integratedTerminal"
        }
    ]
}

之后运行任何脚本,工作目录都会是项目根目录,此时直接用from settings import general(若general.py在settings文件夹内)或import general(若general.py在根目录)就能成功导入。

2. 使用包的相对导入(需注意运行方式)

如果想保留工作目录不变,可以用相对导入语法。比如在rotinas的脚本里写:

from ..settings import general

但这种方式只能通过包的形式运行脚本,需要在项目根目录执行命令:

python -m rotinas.你的脚本文件名

不能直接在VSCode里点击运行(直接运行会把脚本当作独立程序,不识别相对导入)。

3. 手动添加路径(临时方案)

如果不想修改配置,也可以在rotinas的脚本开头手动添加路径,但这种方式不够优雅:

import os
import sys
# 添加上级目录到sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from settings import general

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:01:05