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

已添加__init__.py仍无法找到模块?Python导入问题咨询

Python模块导入问题解析

问题1:在project目录执行python ./test/test1.py找不到lib模块

Python的模块搜索路径(sys.path)默认优先取脚本文件所在的目录,而非当前工作目录(os.getcwd()返回的路径)。你执行python ./test/test1.py时,sys.path的首元素是project/test/,而非project/,所以无法定位到同级的lib文件夹。

问题2:在test目录加sys.path.append('..')能运行,但上层目录不行

在project/test/目录执行脚本时,..指向project/目录,将其加入sys.path后,Python就能找到lib模块。但回到project/目录执行时,..指向的是project的父目录,而非project本身,自然找不到目标模块。

问题3:添加__init__.py仍报错

__init__.py的作用是将文件夹标记为Python可识别的包,但它无法修改模块搜索路径。你的核心问题是sys.path未包含project/目录,因此加了__init__.py也无法解决找不到模块的问题。

问题4:相对导入报错attempted relative import with no known parent package

相对导入(如from .lib...)仅适用于被作为包导入的模块,不能在直接运行的脚本中使用。你直接执行test1.py时,Python将其视为独立脚本,而非某个包的子模块,因此无法识别相对路径中的父包。

可行的解决方法

方案1:动态添加project目录到sys.path

在test1.py开头添加以下代码,确保无论从哪个目录执行都能定位到lib:

import sys
from pathlib import Path

# 获取project目录的绝对路径
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

from lib.lib1 import MyClass

方案2:使用-m参数以包模式运行

回到project目录,执行以下命令:

python -m test.test1

这种方式会自动将project目录加入sys.path,同时将test视为包。此时你也可以把test1.py中的导入改为相对导入:

from ..lib.lib1 import MyClass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:17