同文件夹下Python文件导入失败问题求助
解决Python同文件夹下模块导入失败的问题
我来帮你排查这个导入问题,这种同目录模块导入失败的情况我也碰到过好几次,大概率是运行路径的问题或者导入方式的细节没注意到,咱们一步步来解决:
可能的原因和解决方法
1. 检查你的运行工作目录
如果是从文件夹A的位置执行python B/d.py,那Python的当前工作目录是文件夹A,而非文件夹B。这时候直接import c会找不到模块,因为Python只会在工作目录和sys.path列表里搜索模块。
解决办法:
- 切换到文件夹B的目录下再运行
python d.py,这时候直接import c应该就能正常生效。 - 或者使用相对导入:在d.py里改成
from . import c。注意这个.代表当前目录,但如果直接把d.py作为主脚本运行(比如python d.py),相对导入可能会触发报错,这时候可以看下面的方法。
2. 手动添加模块路径到sys.path
如果不想切换工作目录,或者必须从外部运行d.py,可以在d.py的开头添加代码,把当前脚本所在的文件夹(也就是B)加到Python的搜索路径里:
import sys import os # 获取当前脚本所在的文件夹路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 把这个路径添加到sys.path sys.path.append(current_dir) # 现在再导入c import c
3. 关于__init__.py和__all__的说明
你添加的__all__ = ['c']其实主要是在使用from B import *这种导入方式时生效,用来指定哪些模块会被批量导入。直接import c的场景下,这个__all__并不会起作用,所以有没有它不影响同目录的导入。只要B文件夹里有__init__.py,它就已经是一个合法的Python包了,这部分你没做错。
验证步骤
可以在d.py里先打印一些信息来快速排查:
import os import sys print("当前工作目录:", os.getcwd()) print("Python搜索路径:", sys.path)
看看输出里有没有文件夹B的路径,如果没有,那就是路径的问题,按照上面的方法添加即可。
内容的提问来源于stack exchange,提问作者H.Dai
相关产品推荐
相关产品推荐

