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

Python符号链接执行时导入路径不符预期的解决方法问询

解决Python符号链接脚本导入同目录模块的问题

项目目录结构

project/
├── my_input.py
├── run_me.py
└── test
    ├── my_input.py
    └── run_me.py -> ../run_me.py

问题说明

run_me.py脚本会导入my_input.py的内容,期望通过符号链接的test/run_me.py导入同目录的test/my_input.py,但实际在test目录执行./run_me.py时,导入的是根目录的my_input.py,输出为导入自my_input.py,而非预期的导入自test/my_input.py。

现有代码示例

  • 根目录run_me.py代码:
#!/usr/bin/env python3
from my_input import *
  • 根目录my_input.py内容:
print("导入自my_input.py")
  • test/my_input.py内容:
print("导入自test/my_input.py")

解决方法

方法1:修改脚本导入路径(推荐)

修改run_me.py,让脚本优先从符号链接所在目录查找模块:

#!/usr/bin/env python3
import os
import sys

# 获取脚本的真实路径(解析符号链接)
script_real_path = os.path.realpath(__file__)
# 获取脚本所在目录
script_dir = os.path.dirname(script_real_path)
# 将该目录加入sys.path最前端,确保优先查找
sys.path.insert(0, script_dir)

from my_input import *

修改后,在test目录运行./run_me.py,会优先加载test目录下的my_input.py,输出预期内容。

方法2:改用Python包结构与相对导入

  1. 在project和test目录下分别创建空的__init__.py文件,将项目转为Python包结构;
  2. 修改run_me.py的导入语句为相对导入:
#!/usr/bin/env python3
from .my_input import *
  1. 在project目录下以模块方式运行脚本:
python3 -m test.run_me

方法3:临时设置环境变量

无需修改代码,在test目录运行脚本前,将当前目录加入PYTHONPATH:

PYTHONPATH=. ./run_me.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:46