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

如何在Python同包内导入当前包?

Python包导入问题的解决办法

目录结构

pkg/
    __init__.py
    test.py

__init__.py文件为空。

报错情况分析

1. 相对导入越界错误

执行from .. import pkg时报错:

Traceback (most recent call last):
  File "C:\Game Dev\pkg\test.py", line 1, in <module>
    from .. import pkg
ValueError: attempted relative import beyond top-level package

这是因为test.py本身属于pkg这个顶层包,..试图跳转到包的上层目录,但不存在包含pkg的父包,所以触发越界错误。

2. 绝对导入找不到模块错误

执行import pkg时报错:

Traceback (most recent call last):
  File "C:\Game Dev\pkg\test.py", line 1, in <module>
    import pkg
ModuleNotFoundError: No module named 'pkg'

直接运行test.py时,Python会将脚本所在的C:\Game Dev\pkg目录加入sys.path,而pkg目录本身不在这个路径里,因此无法识别pkg作为模块。

可行解决方案

方案1:以包模块形式运行脚本

切换到pkg的上层目录(即C:\Game Dev),执行以下命令运行test.py:

python -m pkg.test

这种运行方式会将C:\Game Dev添加到sys.path,此时pkg被识别为顶层包,你可以在test.py中正常使用:

  • 绝对导入:import pkg 或 from pkg import ...
  • 相对导入:如果需要调用pkg内的其他同级模块(比如后续新增的模块),用from . import 模块名即可,无需额外导入pkg本身。

方案2:临时修改sys.path(应急用,不推荐)

在test.py开头添加代码,手动将pkg的上层目录加入sys.path:

import sys
import os
# 获取当前脚本的上层目录(即C:\Game Dev)并加入路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

之后就能正常执行import pkg。但这种方法会破坏包的结构独立性,正式项目不建议使用。

方案3:按需导入包内资源

如果你的需求只是使用pkg包内的其他模块或资源,根本不需要导入pkg本身。比如后续在pkg下新增utils.py,直接在test.py中用from . import utils调用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:40:14