HOWTO · Python
Python 오류 해결: 'setup.py' 파일을 열 수 없음: [Errno 2] 파일 또는 디렉터리가 존재하지 않음
이 설명과 함께 Python에서 File not found 또는 No such file or directory 오류를 해결하는 방법을 배웁니다.
이 페이지의 내용
python: can't open file 'setup.py': [Errno 2] No such file or directory라는 메시지는 명령에 지정된 스크립트 경로를 Python이 찾지 못했다는 뜻입니다. 먼저 명령이 Python에 어떤 경로를 열도록 요청하는지 확인하세요. setup.py가 현재 작업 디렉터리에 없거나, 파일 이름이 다르거나, 다른 위치에 있을 수 있습니다. 이는 스크립트가 시작된 뒤 코드가 다른 누락 파일을 열려고 할 때 발생하는 FileNotFoundError와는 다릅니다.
Python이 찾지 못한 파일 확인하기
오류 메시지 전체와 명령을 함께 살펴보세요. 메시지에 Python이 setup.py를 열 수 없다고 나오면 인터프리터가 해당 스크립트를 시작하지 못한 것이므로, 명령의 스크립트 인수와 명령을 실행한 디렉터리를 확인해야 합니다. traceback에 프로그램 내부의 줄이 표시되고 FileNotFoundError가 나온다면 스크립트는 시작된 상태입니다. 이 경우 파일을 여는 코드부터 살펴보세요. 누락된 경로는 setup.py가 아니라 데이터 파일, 설정 파일 또는 다른 리소스의 경로일 수 있습니다.
이 차이에 따라 다음에 확인할 항목이 달라집니다. python setup.py install 같은 명령은 Python에 setup.py라는 스크립트를 찾도록 요청합니다. 반면 app.py가 정상적으로 시작된 뒤 open("records.csv")에서 실패한다면 찾지 못한 파일은 records.csv입니다. 명령이 해당 프로젝트 파일을 사용하도록 되어 있는지 확인하기 전에는 프로젝트 파일을 새로 만들지 마세요.
명령과 작업 디렉터리 확인하기
상대 경로는 프로세스의 현재 작업 디렉터리를 기준으로 해석됩니다. 이 디렉터리는 스크립트가 있는 디렉터리나 파일 탐색기에 표시된 디렉터리와 다를 수 있습니다. 터미널에서 macOS 또는 Linux는 pwd를, Windows 명령 프롬프트는 cd를 입력하면 현재 디렉터리를 확인할 수 있습니다. 프로젝트 디렉터리로 이동하려면 macOS 또는 Linux에서 cd /path/to/project를, 명령 프롬프트에서 cd /d C:\path\to\project를 사용하세요. /d 옵션은 필요한 경우 드라이브와 디렉터리를 모두 변경합니다. 이 예시 경로를 컴퓨터의 실제 경로로 바꾸세요.
그런 다음 해당 디렉터리에서 의도한 명령을 실행하거나, 현재 위치를 기준으로 스크립트 경로를 Python에 지정하세요. 예를 들어 프로젝트 루트에서 스크립트가 src 안에 있다면 스크립트 경로는 src/setup.py입니다. 전체 위치를 알고 있다면 절대 경로를 사용해도 됩니다. 이 예시는 명령 사용법을 보여 주기 위한 것입니다. 모든 프로젝트가 setup.py를 사용하는 것은 아니므로 프로젝트에 문서화된 경로와 명령을 따르세요.
파일 경로와 이름 확인하기
대상 디렉터리를 살펴보고 명령에 적힌 경로와 실제 파일 이름이 정확히 일치하는지 비교하세요. macOS 또는 Linux에서 ls는 현재 디렉터리의 내용을 표시하고, ls /path/to/project는 지정한 디렉터리의 내용을 표시합니다. PowerShell에서는 Get-ChildItem을 사용하세요. 파일 이름뿐 아니라 경로의 각 디렉터리 항목도 확인해야 합니다. 파일이 프로젝트 안에 있어도 Python이 검색하도록 지정된 위치에는 없을 수 있습니다.
디스크에 표시된 파일 이름과 철자 및 대소문자가 일치하는지 확인하세요. 일부 파일 시스템에서는 setup.py와 Setup.py를 서로 다른 이름으로 취급하지만, 다른 파일 시스템에서는 그렇지 않을 수 있습니다. 모든 환경에서 대소문자를 같은 방식으로 처리한다고 가정하지 말고 실제 이름과 경로를 사용하세요. 파일 이름이 의도와 다르다면 프로젝트 규칙에 맞는 경우에만 명령을 수정하거나 파일 이름을 바꾸세요.
실행 중인 스크립트에서도 비슷한 경로 문제가 생길 수 있습니다. open("records.csv")는 프로세스의 작업 디렉터리를 기준으로 해당 상대 경로를 찾습니다. 명령을 실행한 위치에 의존하지 않으려면 Path(__file__).resolve().parent / "records.csv"를 사용해 스크립트 위치를 기준으로 경로를 만들 수 있습니다. 이 방법은 스크립트가 여는 파일에 적용됩니다. Python이 스크립트 인수를 찾는 방식은 바꾸지 않습니다.
누락된 setup.py 복원 또는 다시 만들기
모든 Python 프로젝트에 setup.py가 필요한 것은 아닙니다. 최신 프로젝트는 다른 빌드 설정을 사용하거나 설치용 패키지로 제공되지 않을 수 있습니다. 먼저 저장소의 README, 설치 안내, 프로젝트 루트의 파일을 확인하세요. 문서화된 명령에서 setup.py를 사용하지 않는다면 프로젝트가 실제로 제공하는 명령을 사용하세요. 파일이 필요하다면 이름이 변경되었는지, 다운로드에서 빠졌는지, 작업 트리에서 삭제되었는지 확인하세요.
프로젝트에서 Git을 사용한다면 파일을 복구하기 전에 저장소에서 git status와 git log -- setup.py를 확인하세요. 추적되지 않는 setup.py가 있다고 해서 자동으로 프로젝트에 추가해야 하는 것은 아닙니다. 수정된 파일에는 보존해야 할 작업이 들어 있을 수도 있습니다. 어떻게 할지 결정하기 전에 파일과 프로젝트 안내를 검토하세요.
기록을 확인해 추적 중이던 파일이 삭제되거나 변경된 사실을 알게 되면, 복원하기 전에 관련 커밋과 현재 변경 사항을 살펴보세요. 복원하면 작업 중인 파일이 선택한 버전으로 바뀌므로 필요한 수정 사항은 먼저 보존하세요. 프로젝트 기록에 해당 파일이 없다면 프로젝트의 문서화된 요구사항에 따라 다시 만드세요. 짐작으로 작성한 설정 스크립트는 프로젝트의 의존성이나 패키징 설정에 맞지 않을 수 있습니다.
접근 권한 확인 및 수정 여부 검증하기
경로 누락 오류와 접근 거부 오류는 서로 다른 문제를 가리킵니다. 요청한 경로에 파일이 있는데 Python이 권한 문제를 알린다면 계정에 파일을 읽을 권한이 있는지, 파일이 들어 있는 디렉터리에 접근할 수 있는지 확인하세요. macOS 또는 Linux에서 ls -l path/to/setup.py는 권한 비트를 표시합니다. Windows에서는 파일의 보안 속성을 확인하거나 프로젝트를 소유한 계정을 사용하세요. 권한 확인 결과가 원인일 때만 권한을 변경하세요. 관리자 권한이나 sudo로 실행하는 것을 기본 해결책으로 삼지 마세요.
다음 예시를 살펴보세요.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
setup_file = Path(folder) / "setup.py"
setup_file.write_text("# project setup\n", encoding="utf-8")
print(f"{setup_file.name}: {'found' if setup_file.is_file() else 'missing'}")
setup.py: found
이 독립 실행형 예시는 임시 프로젝트 파일을 만들고 해당 경로가 파일을 가리키는지 확인합니다. 자신의 프로젝트에서는 확인한 경로에 같은 존재 여부 검사를 적용하세요. 이 예시만으로 프로젝트에 setup.py가 있어야 한다고 결론 내릴 수는 없습니다. 코드와 출력 블록은 원문 바이트를 그대로 유지하므로 예시 출력의 found라는 레이블은 영어로 표시됩니다.
명령, 디렉터리 또는 프로젝트 파일을 바로잡은 다음 의도한 위치에서 프로젝트 문서에 나온 명령을 다시 실행하세요. 새 오류가 나타나면 메시지의 경로와 traceback을 살펴 Python이 여전히 스크립트를 열지 못하는 것인지, 아니면 실행 중인 코드가 별도의 리소스를 열지 못하는 것인지 판단하세요. 이 구분을 통해 프로세스에 실제로 필요한 파일에 맞춰 다음 확인 단계를 정할 수 있습니다.