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

如何在Python中从平行目录导入函数且无需合并为同一包?

平行目录间Python函数导入解决方案

当然可以实现,问题出在你之前的配置细节上,下面给你靠谱的解决办法:

方案一:通过sys.path添加父目录路径

先确认你的目录结构是这样:

project_root/
├─ dir_one/
│  └─ file_one.py
└─ dir_two/
   └─ file_two.py

你之前用sys模块时大概率是路径加错了。在file_two.py里这么写:

import sys
from pathlib import Path

# 获取当前文件所在目录的父目录(也就是project_root)
parent_dir = Path(__file__).parent.parent
sys.path.append(str(parent_dir))

# 现在正常导入
from dir_one.file_one import function_one

核心原因:Python需要从project_root目录开始找dir_one这个模块,你之前可能只把dir_one的路径加进去了,导致Python识别不出dir_one作为模块名。

方案二:设置PYTHONPATH环境变量

不想改代码的话,运行脚本前把project_root加到PYTHONPATH里就行:

Windows命令行:

set PYTHONPATH=C:\实际路径\project_root
python dir_two\file_two.py

Linux/macOS终端:

export PYTHONPATH=/实际路径/project_root
python dir_two/file_two.py

设置后,file_two.py里直接写from dir_one.file_one import function_one就能用,Python会自动从PYTHONPATH指定的目录找模块。

为啥之前的方法都失败?

  • 加__init__.py后相对导入报错:直接运行file_two.py时,它是作为顶层脚本执行,不属于任何包结构,所以相对导入(比如from .dir_one...)根本不生效。
  • 合并目录不可行:你已经明确说需要独立运行,这个方案本来就不适合你的场景。
  • 只加dir_one路径到sys.path:这种情况下你只能写from file_one import function_one,但这样容易和其他同名模块冲突,而且不符合你的目录结构需求。
  • 错误的相对导入语法:from .dir_one...这种写法是包内部的相对导入,而你的脚本不在包环境里,自然报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:12