LOADING

加载过慢请开启缓存 浏览器默认开启

记录下Python中有关path的bug及解决方案

2023/10/17 debug python

背景

项目目录如下

.
├── best_model.pth
├── factify2
│   ├── ...
│   
├── inference.py
├── main.py
├── model
│   ├── ... 
│   
├── model_epoch903_acc0.7617333333333334
├── predict.csv
├── __pycache__
│   ├── __init__.cpython-38.pyc
│   └── main.cpython-38.pyc
├── README.md
├── requirements.txt
├── retrieval
│   ├── retrieval.py
│   └── test.py
├── test_data_save.pkl
├── Test.py
├── train_data_save.pkl
├── utils
│   ├── dataset.py
│   └── __pycache__
└── val_data_save.pkl

尝试

/retrieval/retrieval.py 中导入 /main.py 中的 TrainDataset 类。
一开始尝试 from main import TrainDataset 报错,找不到main模块。
会不会是应为当前目录是 main 的子目录,因此修改为 from ..main import TrainDataset 依然报错,不能相对索引。
那是不是项目没加到path里呢?于是修改为

import sys
sys.path.append('..')
print(sys.path)
from main import TrainDataset

依然报错,还是找不着。
main.py 中的 TrainDataset分离到 /utils/dataset.py 还是报错。

解决

在打印的 sys.path 中确实存在 .. 这一项,可是为啥索引不到 main.py 或者 dataset.py 呢?
打印当前工作目录 print (os.path.abspath(os.curdir)) ,结果发现工作目录是 / ,但是运行 /retrieval/retrieval.py 时 Python 未将根目录加入 path 中。所以只需将 sys.path.append('..') 改为 sys.path.append('.') ,问题解决~