Python从兄弟文件夹导入模块失败问题求助
解决兄弟文件夹模块导入问题
我之前也碰到过完全一样的困扰!虽然已经给每个文件夹加了__init__.py,但Python的模块搜索路径规则才是核心问题——它默认只会找当前脚本所在目录和系统的site-packages,兄弟文件夹不在这个搜索列表里。下面给你几个实用的解决方案,你可以按需尝试:
方案1:手动将父目录添加到sys.path
这是最直接的临时解决方案,在fileA.py的最开头添加这段代码,把父目录(也就是包含gfolder、codefolder、utilfolder的那个文件夹)加入Python的搜索路径:
import sys import os # 获取当前脚本的绝对路径,再往上跳一级到父目录 parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(parent_dir)
之后你就可以正常导入兄弟文件夹的模块了,比如要导入utilfolder里的util_module.py,直接写:
from utilfolder import util_module # 或者用别名简化调用 import utilfolder.util_module as util
方案2:使用相对导入(注意使用场景)
如果你的项目是作为一个完整的Python包来使用的,可以用相对导入语法,但不能直接运行fileA.py作为脚本(比如python codefolder/fileA.py会报错)。在fileA.py里这么写:
# .. 表示上一级目录(父目录),然后指定兄弟文件夹和目标模块 from ..utilfolder import util_module
要运行这个脚本的话,得从父目录外面,用模块方式启动:
python -m codefolder.fileA
方案3:设置PYTHONPATH环境变量(永久生效)
如果你不想每次在代码里加sys.path的代码,可以把父目录添加到系统的PYTHONPATH环境变量里,这样Python每次启动都会自动搜索这个目录:
- Linux/macOS:在终端里执行(如果要永久生效,把这句话加到/.bashrc或/.zshrc里):
export PYTHONPATH="/path/to/your/parent_folder:$PYTHONPATH" - Windows:在命令提示符里执行(永久生效的话,去系统环境变量里添加PYTHONPATH):
set PYTHONPATH=C:\path\to\your\parent_folder;%PYTHONPATH%
额外注意事项
__init__.py文件不需要写任何内容,只要存在就可以标记这个文件夹为Python包。- 检查文件夹名、模块名的拼写,Python是大小写敏感的,别把
UtilFolder写成utilfolder了。 - 如果用相对导入,一定要确保你的代码是作为包的一部分被导入,而不是直接执行脚本——直接执行的话,Python会把当前脚本当作顶层模块,
..这种相对路径就会失效。
内容的提问来源于stack exchange,提问作者jack_pl
相关产品推荐
相关产品推荐

