[python] 왜 파이썬 코드를 컴파일해야합니까?
왜 파이썬 스크립트를 컴파일하겠습니까? .py 파일에서 직접 실행할 수 있으며 제대로 작동하므로 성능상의 이점이 있습니까?
또한 내 응용 프로그램의 일부 파일은 .pyc로 컴파일되는 반면 다른 파일은 그렇지 않은 이유는 무엇입니까?
답변
바이트 코드로 컴파일되어 훨씬 더 많이 사용할 수 있습니다.
일부 파일이 컴파일되지 않는 이유 python main.py
는 스크립트를 실행할 때마다 호출하는 기본 스크립트 가 다시 컴파일되기 때문입니다. 가져온 모든 스크립트는 컴파일되어 디스크에 저장됩니다.
벤 블랭크의 중요한 추가 :
컴파일 된 스크립트를 실행할 때 시작
시간 이 더 빠르지 만 (컴파일 할 필요가 없기 때문에) 더 빨리 실행 되지 않습니다 .
답변
.pyc 파일은 이미 바이트 코드로 컴파일 된 Python입니다. Python은 호출 한 .py 파일과 이름이 같은 파일을 찾으면 자동으로 .pyc 파일을 실행합니다.
“파이썬 소개” 는 컴파일 된 파이썬 파일에 대해 다음과 같이 말합니다 .
‘.py’파일에서 읽을 때보 다 ‘.pyc’또는 ‘.pyo’파일에서 읽을 때 프로그램이 더 빨리 실행되지 않습니다. ‘.pyc’또는 ‘.pyo’파일에 대해 더 빠른 유일한 것은 파일을로드하는 속도입니다.
.pyc 파일을 실행하면 파이썬에서 파일을 컴파일하기 전에 오버 헤드가 발생하지 않아도됩니다. 어쨌든 파이썬은 .py 파일을 실행하기 전에 바이트 코드로 컴파일 할 것이기 때문에 성능 향상이 없어야합니다.
컴파일 된 .pyc 파일을 사용하면 얼마나 향상 될 수 있습니까? 그것은 스크립트가하는 일에 달려 있습니다. “Hello World”를 간단하게 인쇄하는 매우 간단한 스크립트의 경우, 컴파일은 전체 시작 및 실행 시간의 상당 부분을 구성 할 수 있습니다. 그러나 전체 런타임에 비해 스크립트를 컴파일하는 비용은 스크립트를 오래 실행할수록 줄어 듭니다.
명령 줄에서 지정한 스크립트는 .pyc 파일에 저장되지 않습니다. 해당 “주”스크립트에 의해로드 된 모듈 만 해당 방식으로 저장됩니다.
답변
플러스 :
첫째 : 온화하고 패배 가능한 난독 화.
둘째 : 컴파일 결과 파일 크기가 훨씬 작아지면로드 시간이 더 빨라집니다. 웹에 좋습니다.
셋째 : 파이썬은 컴파일 단계를 건너 뛸 수 있습니다. 초기로드에서 더 빠릅니다. CPU와 웹에 좋습니다.
넷째, 의견이 많을수록 소스 파일 과 비교 하여 .pyc
또는 .pyo
파일이 작아집니다 .py
.
다섯째 : 파일 .pyc
또는 .pyo
파일 만 보유한 최종 사용자 는 되돌려지지 않은 변경으로 인해 발생한 버그를 사용자에게 알리기 어렵습니다.
여섯 번째 : 임베디드 시스템을 목표로하는 경우, 더 작은 크기의 파일을 확보하면 상당한 이점을 얻을 수 있으며 아키텍처가 안정적이므로 아래에 설명 된 단점 중 하나가 적용되지 않습니다.
최상위 편집
최상위 파이썬 소스 파일을 다음과 .pyc
같은 방식으로 파일로 컴파일 할 수 있다는 것을 아는 것이 유용합니다 .
python -m py_compile myscript.py
주석이 제거됩니다. 그것은 잎 docstrings
그대로. 를 제거 docstrings
하고 싶다면 (왜 그렇게하고 있는지 진지하게 생각하고 싶을 수도 있음) 대신이 방법으로 컴파일하십시오 …
python -OO -m py_compile myscript.py
… 그리고 당신은 .pyo
파일 대신에 파일을 얻을 것입니다 .pyc
; 코드의 필수 기능 측면에서 똑같이 배포 가능하지만 제거 된 크기로 작습니다 docstrings
( docstrings
처음에 괜찮은 경우 후속 고용에 대해서는 이해하기 쉽지 않음). 그러나 아래의 단점 3을 참조하십시오.
파이썬이 사용하는 참고 .py
가 존재하는 경우는, 실행할지 여부를 결정하기 위해, 파일의 날짜를 .py
받는 반대로 파일 .pyc
이나 .pyo
파일을 편집 평 파일 있도록 —하고, .pyc
또는 .pyo
무효이며, 어떤 당신이 손실됩니다 얻은 도움이됩니다. 예를 들어 .pyc
또는 .pyo
이점을 다시 다시 얻으려면 다시 컴파일해야 합니다.
단점 :
첫째 : “매직 쿠키” .pyc
와 .pyo
python 파일이 컴파일 된 시스템 아키텍처를 나타내는 파일이 있습니다. 이러한 파일 중 하나를 다른 유형의 환경에 배포하면 파일이 손상됩니다. 당신이 배포하는 경우 .pyc
또는 .pyo
관련없이 .py
재 컴파일 또는 touch
그래서는 대체 .pyc
또는 .pyo
최종 사용자는 하나, 문제를 해결할 수 있습니다.
둘째 : 위에서 설명한 명령 줄 옵션을 docstrings
사용하여 건너 뛰면 -OO
아무도 해당 정보를 얻을 수 없으므로 코드 사용이 더 어려워 지거나 불가능 해집니다.
셋째 : Python의 -OO
옵션은 -O
명령 행 옵션에 따라 일부 최적화를 구현합니다 . 작동이 변경 될 수 있습니다. 알려진 최적화는 다음과 같습니다.
sys.flags.optimize
= 1assert
문을 건너 뜁니다__debug__
= 거짓
넷째 : #!/usr/bin/python
첫 번째 줄 의 순서대로 파이썬 스크립트를 의도적으로 실행 가능하게 만들면 이가 제거 .pyc
되고 .pyo
파일 이 제거 되고 해당 기능이 손실됩니다.
다섯째 : 다소 명백하지만 코드를 컴파일하면 코드의 사용에 영향을 줄뿐만 아니라 다른 사람들이 작업에서 배울 가능성이 줄어 듭니다.
답변
컴파일 된 파이썬 실행 성능이 향상되었습니다. 그러나 .py 파일을 가져온 모듈로 실행하면 python은이를 컴파일 및 저장하며 .py 파일이 변경되지 않는 한 항상 컴파일 된 버전을 사용합니다.
파일이 사용될 때 인터페이트 된 언어의 경우 프로세스는 다음과 같습니다.
1. 인터 페치에 의해 파일이 처리됩니다.
2. 파일이 컴파일됩니다.
3. 컴파일 된 코드가 실행됩니다.
분명히 사전 컴파일 된 코드를 사용하면 2 단계를 제거 할 수 있습니다. 이는 파이썬, PHP 및 기타에 적용됩니다.
Heres는 차이를 설명하는 흥미로운 블로그 게시물 http://julipedia.blogspot.com/2004/07/compiled-vs-interpreted-languages.html을
여기 그리고 파이썬 컴파일 과정을 설명하는 항목입니다 http://effbot.org/zone은 /python-compile.htm
답변
이미 언급했듯이 파이썬 코드를 바이트 코드로 컴파일하여 성능을 향상시킬 수 있습니다. 이것은 일반적으로 가져온 스크립트에 대해서만 파이썬 자체에서 처리합니다.
파이썬 코드를 컴파일하려는 또 다른 이유는 지적 재산이 복사 및 / 또는 수정되는 것을 방지하기위한 것일 수 있습니다.
이에 대한 자세한 내용은 Python 문서를 참조하십시오 .
답변
컴파일 된 스크립트를 실행할 때 확실히 성능 차이가 있습니다. 일반 .py
스크립트 를 실행 하면 컴퓨터는 실행될 때마다이를 컴파일하며 시간이 걸립니다. 현대 컴퓨터에서는 이것이 거의 눈에 띄지 않지만 스크립트가 커짐에 따라 문제가 더 많이 발생할 수 있습니다.
답변
다루지 않은 것은 소스-소스-컴파일 입니다. 예를 들어 nuitka
Python 코드를 C / C ++로 변환하고 느린 가상 머신에서 실행되는 Python 바이트 코드 대신 CPU에서 직접 실행되는 이진 코드로 컴파일합니다.
이로 인해 속도가 크게 향상되거나 환경이 C / C ++ 코드에 의존하는 동안 Python으로 작업 할 수 있습니다.