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

Python模块导入路径疑问:sys.path为何不是脚本启动目录?

问题解答

为什么sys.path里是main_folder/tests而不是main_folder?

Python在直接运行脚本文件时,会自动把该脚本所在的目录添加到sys.path的最前端,这个规则和你执行命令时的工作目录(os.getcwd()返回的路径)是完全独立的两个概念。

你执行的命令是python tests/test01.py,脚本test01.py实际在main_folder/tests目录下,所以Python会自动把这个路径加入sys.path;而你执行命令的工作目录main_folder并不会被自动添加到sys.path里,这就是为啥找不到some_package的原因——some_package在main_folder下,但main_folder不在sys.path的搜索路径中。

解决办法

这里给你几种可行的方案:

方案1:手动把main_folder加入sys.path

在test01.py的开头添加以下代码,动态把上级目录(也就是main_folder)加入搜索路径:

import sys
from pathlib import Path

# 获取当前脚本所在目录的上级目录(main_folder)
root_dir = Path(__file__).parent.parent
sys.path.append(str(root_dir))

# 现在就能正常导入了
import some_package

方案2:用模块方式执行脚本(推荐用于项目测试)

给tests目录添加一个空的__init__.py文件,把它变成Python包,然后在main_folder下执行:

python -m tests.test01

这种情况下,Python会把当前工作目录(main_folder)加入sys.path,同时你可以在test01.py里用相对导入:

from .. import some_package

方案3:设置PYTHONPATH环境变量

执行脚本前,先把main_folder设置到PYTHONPATH中:

  • Linux/macOS:
    export PYTHONPATH="./"
    python tests/test01.py
    
  • Windows(命令提示符):
    set PYTHONPATH=./
    python tests/test01.py
    

这样Python会自动把main_folder加入sys.path,无需修改脚本代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:37