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

在终端与Jupyter中从不同目录导入Python文件的问题

Python包导入问题的解决方案

问题根源

直接执行python package/app1/foo.py时,Python会将package/app1视为顶层模块所在目录,而非把project下的package当作完整包结构的一部分。这就导致:

  • 相对导入from ..app2 import bar找不到父包,因为Python无法识别package作为当前模块的上层包
  • 绝对导入from package.app2 import bar失效,因为此时sys.path里没有project目录,Python找不到package这个顶层包

正确解决方法

方法1:使用模块方式运行脚本(推荐)

在project目录下,用-m参数以模块形式运行foo.py:

python -m package.app1.foo

这种方式会让Python把project目录加入sys.path,同时将package识别为顶层包,此时foo.py里的相对导入from ..app2 import bar或者绝对导入from package.app2 import bar都能正常工作。

方法2:临时修改sys.path(不推荐,仅作应急)

如果必须直接运行foo.py,可以在foo.py的最开头添加代码,手动将project目录加入sys.path:

import sys
from pathlib import Path

# 获取project目录的绝对路径并加入sys.path
project_dir = str(Path(__file__).parent.parent.parent)
if project_dir not in sys.path:
    sys.path.insert(0, project_dir)

# 之后就能正常使用绝对导入
from package.app2 import bar

但这种方法会破坏包的独立性,不建议在正式项目中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:30:56