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
相关产品推荐
相关产品推荐

