2017-05-05 6 views
1

전체 파이썬 표준 라이브러리를 바이트 코드로 미리 "컴파일"하는 쉬운 방법이 있습니까? 그렇다면 표준 라이브러리가 업데이트되거나 수정되지 않는 한 해당 .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 개의 파일을 만들어 문제를 재현 할 수는 없습니다.

예기치 않게 충돌 할 수있는 파이썬과 네이티브 코드를 실행하는 프로세스에서 발생하므로 표준 라이브러리에 속한 파일이 필요에 따라 바이트 코드로 "컴파일"되는 것을 좋아하지 않습니다. 위의 상황을 해결하는 데 도움이되는지 여부에 관계없이 모든 파이썬 코드를 미리 컴파일 해 두는 것을 선호합니다.

+1

그렇다면 Python 사용자에게 버그를 신고해야합니다. 그러나 원칙적으로 인터프리터는 다음에 필요할 때 .pyc 파일을 손상시킨 모듈을 다시 컴파일해야합니다. –

+1

난 그냥 0 바이트 파일'C : \ Python27 \ Lib \ hmac.pyc'을 생성하고 대화식 Python 세션에서'import hmac'을 실행하여 이것을 재현하려고했습니다. 파일은 5kb 크기로 재생성되었으므로 오류가 발생하지 않았습니다. 동료의 0 바이트 Python 파일에 대한 정보가 있습니다. 실제 오류는 Python을 실행할 때마다 예외가 발생하고 Python을 다시 설치하면 문제가 해결된다는 것입니다. 손상된 .pyc 파일로 인해 발생하는지 여부는 알 수 없습니다. 나는 내 질문을 업데이트 할 것이다. –

+0

http://stackoverflow.com/a/17030047/2279059에 따르면 파이썬 2.x에서는 파이썬 파일의 손상이 가능할 수 있지만 파이썬 3.3에서는 손상을 방지하는 메커니즘이 있습니다. –

답변

1

.pyc 파일 은 관리자 용으로도 읽기 전용으로 설정하십시오. 이것은 파이썬이 불필요하게 modyfing하는 것을 막을 것입니다.

Windows의 경우 속성 → 보안 → 편집으로 이동하여 모든 그룹에 대한 모든 권한을 거부하십시오.

+0

이렇게하면'.pyc' 파일이 생성되는 것을 막고 Python은'.pyc' ('locale.pyc' 삭제, 쓰기 권한 거부,'import locale'과'dir (locale) 'locale.pyc'가 존재하지 않는지 확인). 그러나 바이트 코드 파일을 가지고 있지 않으면 성능에 영향을 미칠 수 있으므로 쓰기 액세스를 거부하기 전에 해당 파일이 있는지 확인하고 싶습니다 (불필요 할 수도 있음). –