背景
项目目录如下
.
├── 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('.') ,问题解决~