문제 설명
최근 학부 졸업 프로젝트를 하다가 파이썬이 Jupyter에서 모듈이나 파일에 있는 함수를 import 한 후, 모듈이나 파일에 있는 함수가 변경되어 저장되면 모듈이 다시 호출될 때 원래 함수가 가져왔기 때문에 여전히 호출됩니다. 의 모듈 또는 함수가 업데이트되지 않았습니다.
FileNotFoundError: [Errno 2] No such file or directory:
그러나 작성자는 파일 읽기 경로를 변경했습니다.
import QDdata as QD
# QDdata.py
class QDloadStrokeData(data.Dataset):
def __init__(self,no = 0, data_file=None,val = False, image_size=(96,96),transforms=None):
if data_file == None:
if val == True:
data_file = "/root/quickdraw dataset after process/quickdraw-doodle-recognition/val/val_dataset.csv"
else:
data_file = "/root/quickdraw dataset after process/quickdraw-doodle-recognition/train/" + 'train_k{}.csv'.format(no)
if os.path.exists(data_file) == False:
print(data_file,"does not exist\n")
해결책
모듈을 가져올 때 다음으로 변경:
import some_module # some_module表示某个模块,首次导入
import imp # 导入imp包
imp.reload(some_module) # 重新导入模块
가져오기 기능인 경우 두 줄을 더 추가합니다.
from some_module import some_func # some_func某个函数,首次导入
import some_module # 防止reload报错
import imp
imp.reload(some_module)
from some_module import some_func # 再次导入
원인 분석:
(1) from some_module import some_func를 사용할 때 some_module 모듈을 import한 적이 없다면 some_module 모듈을 먼저 로드한 다음 사용할 some_func 함수만 some_module 모듈에서 현재 모듈로 로드합니다(즉, , 현재 실행 중인 파일) .
(2) some_func 함수가 로컬에서 수정된 후 some_func 함수를 다시 가져오려면 some_module 모듈이 이 파일에 로드되었기 때문에 from some_module import some_func를 다시 사용하는 것만으로는 충분하지 않습니다. 수정 전 some_module 모듈 이 시점에서 다시 가져오면 이 모듈의 원래 some_func 함수가 로드되므로 로컬 수정 사항이 적용되지 않습니다.
(3) 따라서 위의 코드를 사용하여 some_module을 다시 가져올 수 있습니다.
따라서 이전 모듈 가져오기는 다음과 같이 수정됩니다.
import QDdata as QD
import imp
imp.reload(QD)