python에서 외부 파일을 사용하고 있을 때 주의점
2020 7 14Tag : python
문제
보통 메인 py 파일과 다른 폴더를 만들어 그 안에 다른 py 파일이라든지, 세이브 파일 등을 집어넣게 될 것이다.
mainScript.py
└resources
└subScript.py
└saveFile.txt
위와 같은 구조로 py 스크립트를 잘 만들고 나서, pyinstaller를 이용해서 exe 파일로 뽑아내고
( 사용한 명령어 : pyinstaller -F mainScript.py
)
나니 세이브 파일이 없다는 오류가 나왔다.
해결
여러가지 조사한 결과, 만들어 낸 실행 파일 뿐 아니라 resources 폴더와 그 안의 saveFile.txt 파일도 필요하다는 것을 알게 되었다. 단순히 놓아두는 것 만으로 잘 돌아가게 되었다.
추가 정보
상대 경로보다는 절대 경로가 안전하긴 하다. 그러나 만약 코드 안에 박혀있게 되면 유연한 대응이 불가능하게 된다.
알아보는 과정에서, 파일을 실행하는 위치를 동적으로 받아올 수 있는 코드가 있었다.
os.path.abspath(path)
지금 구조라면 resources 폴더의 절대경로를 얻으려면 단순히
os.path.abspath("resources")
라고 하면 된다.
추가 정보 2
경로 중 디렉토리 명만 얻는 방법이 있는데,
os.path.dir(path)
주의할 점으로는 마지막에 /
가 있는지에 따라 마지막 부분까지 삭제해버리거나, 남겨두거나 한다는 점이다.
따라서 해당 path가 파일인지 아닌지를 먼저 확인
os.path.isfile(path)
해주고 path를 조정할지 어떻게 할지를 고려해야할 것이다.