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

Python切换工作目录后无法导入模块的问题排查

问题分析与解决方案

核心问题

你没有错误使用os.chdir,问题出在Python的模块搜索路径(sys.path)机制:切换当前工作目录只是改变了程序的文件操作上下文,但Python查找模块时只会遍历sys.path列表中的路径,不会自动将当前工作目录加入其中。所以即使你能列出application目录的内容,只要它不在sys.path里,就找不到utils模块。

解决当前util1.py的导入问题

直接将application目录添加到sys.path即可,无需切换工作目录:

import sys
from os.path import dirname, abspath

# 获取application目录的绝对路径
app_root = dirname(dirname(abspath(__file__)))
# 避免重复添加路径
if app_root not in sys.path:
    sys.path.append(app_root)

from utils import util1

注意:如果你的utils目录下没有__init__.py文件,Python 3.3+会将其视为「命名空间包」也能导入,但建议添加一个空的__init__.py让结构更规范。

便捷访问application同级目录的大量模块

如果要访问application父目录下的其他模块(比如父目录为project,project下有application和other_modules等文件夹),只需将父目录添加到sys.path:

import sys
from os.path import dirname, abspath

# 获取application的父目录(即project目录)
project_root = dirname(dirname(dirname(abspath(__file__))))
if project_root not in sys.path:
    sys.path.append(project_root)

# 现在可以直接导入同级模块,例如:
# from other_modules import some_module

额外提示

如果是长期开发的项目,更规范的做法是通过pyproject.toml或setup.py将项目配置为可安装包,开发时用pip install -e .安装为 editable 模式,这样无需手动修改sys.path就能直接导入所有模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:06:26