.pyc 파일은 해당 코드 요소를 가져올 때마다 생성되며 해당 코드 파일이 업데이트 된 경우 업데이트됩니다. .pyc 파일이 삭제되면 자동으로 다시 생성됩니다. 그러나 해당 코드 파일이 삭제 될 때 자동으로 삭제 되지 는 않습니다 .
이로 인해 파일 수준 리팩터링 중에 정말 재미있는 버그가 발생할 수 있습니다.
우선, 자신의 컴퓨터에서만 작동하고 다른 사람에게는 작동하지 않는 코드를 푸시 할 수 있습니다. 삭제 한 파일에 대한 댕글 링 참조가있는 경우 .pyc 파일을 가져 오기에 사용할 수 있으므로 관련 .pyc 파일을 수동으로 삭제하지 않으면 로컬에서 계속 작동합니다. 이것은 적절하게 구성된 버전 제어 시스템이 .py 파일이 아닌 중앙 저장소로만 .py 파일을 푸시한다는 사실과 더해집니다. 즉, 코드가 "가져 오기 테스트"(모든 것을 가져 오면 괜찮음)를 통과 할 수 있습니다. 다른 사람의 컴퓨터에서 작업합니다.
둘째, 패키지를 모듈로 바꾸면 꽤 끔찍한 버그가 생길 수 있습니다. 패키지 ( __init__.py
파일이 있는 폴더 )를 모듈 (.py 파일)로 변환하면 한 때 해당 패키지를 나타내는 .pyc 파일이 남아 있습니다. 특히 __init__.pyc
유적. 따라서 중요하지 않은 코드가 포함 된 foo 패키지가있는 경우 나중에 해당 패키지를 삭제하고 일부 기능이있는 foo.py 파일을 만들고 다음 def bar(): pass
을 실행합니다.
from foo import bar
당신은 얻는다 :
ImportError: cannot import name bar
파이썬은 여전히 foo 패키지의 이전 .pyc 파일을 사용하고 있기 때문에 어느 것도 bar를 정의하지 않습니다. 이것은 .pyc 파일로 인해 완전히 작동하는 코드가 손상 될 수있는 웹 서버에서 특히 문제가 될 수 있습니다.
이러한 두 가지 이유 (및 다른 이유)의 결과로 배포 코드와 테스트 코드는 다음과 같은 bash 행과 같이 .pyc 파일을 삭제해야합니다.
find . -name '*.pyc' -delete
또한 python 2.6부터 -B
.pyc 파일을 사용하지 않도록 플래그 와 함께 python을 실행할 수 있습니다. .pyc 파일을 피하는 방법을 참조하십시오 . 상세 사항은.
참고 항목 : 프로젝트에서 모든 .pyc 파일을 제거하려면 어떻게합니까?
rm *.pyc
. 중첩 폴더의 .pyc 파일은 삭제되지 않습니다. 사용find . -name '*.pyc' -delete
대신에