전체 파이썬 표준 라이브러리를 바이트 코드로 미리 "컴파일"하는 쉬운 방법이 있습니까? 그렇다면 표준 라이브러리가 업데이트되거나 수정되지 않는 한 해당 .pyc
파일이 이미있는 경우 Python이 파일을 다시 컴파일하지 못하도록 보장 할 수 있습니까?전체 파이썬 표준 라이브러리를 바이트 코드로 컴파일하는 것이 가능하고 가능합니까?
배경 : 응용 프로그램 서버에서 파이썬은 때로는 자발적으로이 같은 자체 명단 깨진 상태로 전환 :
C:\> python
Traceback (most recent call last):
File "C:\Python27\lib\site.py", line 563, in <module>
main()
File "C:\Python27\lib\site.py", line 552, in main
aliasmbcs()
File "C:\Python27\lib\site.py", line 478, in aliasmbcs
enc = locale.getdefaultlocale()[1]
AttributeError: 'module' object has no attribute 'getdefaultlocale'
하고는 파이썬을 다시 설치하여 해결할 수 있습니다. 다른 사람이 그가 (0 바이트) 손상된 파일 .pyc
을 보았고 그 파일을 삭제하면 그 문제가 해결되었다고 말했습니다. 그러나 의도적으로 0 바이트 인 .pyc
개의 파일을 만들어 문제를 재현 할 수는 없습니다.
예기치 않게 충돌 할 수있는 파이썬과 네이티브 코드를 실행하는 프로세스에서 발생하므로 표준 라이브러리에 속한 파일이 필요에 따라 바이트 코드로 "컴파일"되는 것을 좋아하지 않습니다. 위의 상황을 해결하는 데 도움이되는지 여부에 관계없이 모든 파이썬 코드를 미리 컴파일 해 두는 것을 선호합니다.
그렇다면 Python 사용자에게 버그를 신고해야합니다. 그러나 원칙적으로 인터프리터는 다음에 필요할 때 .pyc 파일을 손상시킨 모듈을 다시 컴파일해야합니다. –
난 그냥 0 바이트 파일'C : \ Python27 \ Lib \ hmac.pyc'을 생성하고 대화식 Python 세션에서'import hmac'을 실행하여 이것을 재현하려고했습니다. 파일은 5kb 크기로 재생성되었으므로 오류가 발생하지 않았습니다. 동료의 0 바이트 Python 파일에 대한 정보가 있습니다. 실제 오류는 Python을 실행할 때마다 예외가 발생하고 Python을 다시 설치하면 문제가 해결된다는 것입니다. 손상된 .pyc 파일로 인해 발생하는지 여부는 알 수 없습니다. 나는 내 질문을 업데이트 할 것이다. –
http://stackoverflow.com/a/17030047/2279059에 따르면 파이썬 2.x에서는 파이썬 파일의 손상이 가능할 수 있지만 파이썬 3.3에서는 손상을 방지하는 메커니즘이 있습니다. –