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

Python子目录脚本导入上级util包遇相对导入ImportError

解决Python上级目录导入util包的ImportError问题

问题详情

从day03这类子目录导入上级目录的util包时,触发错误:

ImportError: attempted relative import with no known parent package

试过的导入语法包括:

import util
import ..util
from .. import util
from ..util import parser
from AdventOfCode2022 import util
from ..AdventOfCode2022 import util
from ...AdventOfCode2022 import util

当前目录结构:

.
├── day03
│   ├── input.txt
│   ├── part1.py
│   ├── part2.py
│   └── test_input.txt
└── util
    ├── __init__.py
    └── parser.py

需求是从任意day0*/目录都能导入util包。

可行解决方案

1. 动态添加项目根目录到Python路径

在part1.py或part2.py的最开头加入这段代码,把上级目录(项目根目录)加入Python的模块搜索路径:

import sys
from pathlib import Path

# 获取当前文件所在目录的上级目录
sys.path.append(str(Path(__file__).parent.parent))

# 之后就能正常导入
import util
from util import parser

这种方法不需要修改环境变量,脚本可以直接运行。

2. 以模块形式运行脚本

先给day03目录添加一个空的__init__.py文件,把它变成Python模块。然后回到项目根目录,用以下命令运行脚本:

python -m day03.part1

此时就能使用相对导入语法:

from .. import util
from ..util import parser

3. 配置PYTHONPATH环境变量

把项目根目录添加到PYTHONPATH环境变量中,之后直接运行脚本就能直接import util:

  • Linux/macOS:
export PYTHONPATH="/你的项目根目录路径:$PYTHONPATH"
  • Windows(命令提示符):
set PYTHONPATH=C:\你的项目根目录路径;%PYTHONPATH%
  • Windows(PowerShell):
$env:PYTHONPATH = "C:\你的项目根目录路径;" + $env:PYTHONPATH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:31:18