如何跨相邻文件夹跨平台导入Python代码?求简便方案
嘿,我来给你几个跨Windows和Linux的通用方案,都比你之前的方法简单多了!先明确下你的目录结构:
outerLayer/ ├─ innerLayer1/ │ └─ main.py └─ innerLayer2/ └─ functions.py
下面是两种靠谱的解决方案:
最推荐:用pathlib动态添加父目录到sys.path
这种方法不需要改任何目录结构,几行代码搞定,pathlib会自动处理Windows的\和Linux的/,完全不用自己拼接路径:
from pathlib import Path import sys # 拿到outerLayer目录的绝对路径 outer_layer_dir = Path(__file__).parent.parent # 把这个路径加到Python的模块搜索列表里 sys.path.append(str(outer_layer_dir)) # 现在直接导入就行啦 from innerLayer2 import functions
简单说下逻辑:Path(__file__)是当前main.py的路径,.parent取到它的父文件夹innerLayer1,再.parent就拿到了outerLayer,把这个路径加入sys.path后,Python就能找到innerLayer2里的functions了。
备选:用相对导入(需按包运行)
如果你愿意给outerLayer加个空的__init__.py把它变成Python包,也可以用相对导入:
- 先在outerLayer下建个空文件
__init__.py,目录结构变成这样:
outerLayer/ ├─ __init__.py ├─ innerLayer1/ │ └─ main.py └─ innerLayer2/ └─ functions.py
- 在main.py里写相对导入代码:
from ..innerLayer2 import functions
- 注意哦:这种方式必须从outerLayer的父目录运行脚本,终端里执行这个命令(Windows和Linux通用):
python -m outerLayer.innerLayer1.main
不能直接进到innerLayer1文件夹里跑python main.py,不然会报错的。
总的来说,第一种方案更灵活,不用额外加文件,也没运行方式限制,绝对是你要的简便跨平台方案~
内容的提问来源于stack exchange,提问作者Zak Stucke
相关产品推荐
相关产品推荐

