MapleStory Finger Point

Development/YOLO

Yolov7 프로젝트 실행 파일 만들기

吳鍾振 2023. 1. 9. 21:38

최근에 사람을 인식하여 모자이크 처리하는 프로그램을 작성하였는데, 실행 파일 만드는 도중 에러가 발생하였다.

진행한 환경은 다음과 같다.
- GPU: NVIDIA GeForce RTX 3070 Laptop GPU
- CUDA: 11.6
- cuDNN: 8.5.0

    ...
    Process producer:
    Traceback (most recent call last):
      File "multiprocessing\process.py", line 315, in _bootstrap
      File "multiprocessing\process.py", line 108, in run
      File "detect_ui.py", line 187, in detect
      File "utils\torch_utils.py", line 65, in select_device
        s = f'YOLOR 🚀 {git_describe() or date_modified()} torch {torch.__version__} '  # string
      File "utils\torch_utils.py", line 50, in date_modified
        t = datetime.datetime.fromtimestamp(Path(path).stat().st_mtime)
      File "pathlib.py", line 1232, in stat
    FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다: 'C:\\Workspace\\mosaic\\utils\\torch_utils.pyc'

확인해보니 utils 폴더에 있는 torch_utils.py 파일의 date_modified 함수에서 경로를 불러오는 부분에서 에러가 발생하였다.

그런데 실행 파일을 만들기 전에는 이런 에러를 본 적도 없었는데, path 변수가 에러가 발생한다고 갑자기 나와서 당황했다.
py 파일로 실행했을 때는 해당 변수 값이 C:\Workspace\mosaic\utils\torch_utils.py 로 나왔었다.
\가 두개씩 붙은 것도 이상하고, 왜 py가 아닌 pyc를 찾는지도 모르겠다. 당연히 pyc 파일은 해당 경로에 없다.

해결법을 검색해보니 PyInstaller를 제거하고 다시 설치하라는 방법도 있었지만 모두 다 소용이 없었다.

대략 6시간을 끙끙대다 뭔가 꼬여도 단단히 꼬인 것 같아서 어쩔수 없이 하드 코딩으로 일단 넘기기로 했다..

아래는 원본 함수이다.

# torch_utils.py [line 48]
def date_modified(path=__file__):
    # return human-readable file modification date, i.e. '2021-3-26'
    t = datetime.datetime.fromtimestamp(Path(path).stat().st_mtime)
    return f'{t.year}-{t.month}-{t.day}'

여기 path가 '~~~.pyc'가 나오므로, 마지막 문자열 c를 제거하였다.. 물론 조건문도 추가하여 py 파일이 맞을 때는 넘어가도록 하였다.

def date_modified(path=__file__):
    # return human-readable file modification date, i.e. '2021-3-26'
    if path[-1:] == 'c':
    	t = datetime.datetime.fromtimestamp(Path(path[:-1]).stat().st_mtime)
    else:
    	t = datetime.datetime.fromtimestamp(Path(path).stat().st_mtime)
    return f'{t.year}-{t.month}-{t.day}'

 

정말 쓰레기 코드지만 일단 급한 불을 끈 뒤, 해당 에러에 대해 자세히 알아보고 글을 추가할 예정이다.

반응형