왜 파이썬 코드를 컴파일해야합니까?
왜 파이썬 스크립트를 컴파일하겠습니까? .py 파일에서 직접 실행할 수 있으며 제대로 작동하므로 성능상의 이점이 있습니까?
또한 내 응용 프로그램의 일부 파일은 .pyc로 컴파일되는 반면 다른 파일은 그렇지 않은 이유는 무엇입니까?
바이트 코드로 컴파일되어 훨씬 더 많이 사용할 수 있습니다.
일부 파일이 컴파일되지 않는 이유 python main.py
는 스크립트를 실행할 때마다 호출하는 기본 스크립트 가 다시 컴파일되기 때문입니다. 가져온 모든 스크립트는 컴파일되어 디스크에 저장됩니다.
Ben Blank의 중요한 추가 사항 :
컴파일 된 스크립트를 실행할 때 시작 시간 이 더 빠르지 만 (컴파일 할 필요가 없기 때문에) 더 빨리 실행 되지 않습니다 .
.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
과 달리 파일을 실행할지 여부를 결정합니다. 따라서 .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. 파일이 interpeter에 의해 처리됩니다.
2. 파일이 컴파일됩니다.
3. 컴파일 된 코드가 실행됩니다.
분명히 사전 컴파일 된 코드를 사용하면 2 단계를 제거 할 수 있습니다. 이는 파이썬, PHP 및 기타에 적용됩니다.
다음은 http://julipedia.blogspot.com/2004/07/compiled-vs-interpreted-languages.html 차이점을 설명하는 흥미로운 블로그 게시물
입니다. 다음은 Python 컴파일 프로세스 http://effbot.org/zone 을 설명하는 항목입니다 . /python-compile.htm
이미 언급했듯이 파이썬 코드를 바이트 코드로 컴파일하여 성능을 향상시킬 수 있습니다. 이것은 일반적으로 가져온 스크립트에 대해서만 파이썬 자체에서 처리합니다.
파이썬 코드를 컴파일하려는 또 다른 이유는 지적 재산이 복사 및 / 또는 수정되는 것을 방지하기위한 것일 수 있습니다.
이에 대한 자세한 내용은 Python 문서를 참조하십시오 .
컴파일 된 스크립트를 실행할 때 확실히 성능 차이가 있습니다. 일반 .py
스크립트 를 실행 하면 컴퓨터는 실행될 때마다이를 컴파일하며 시간이 걸립니다. 현대 컴퓨터에서는 이것이 거의 눈에 띄지 않지만 스크립트가 커짐에 따라 문제가 더 많이 발생할 수 있습니다.
다루지 않은 것은 소스-소스-컴파일 입니다. 예를 들어 nuitka
Python 코드를 C / C ++로 변환하고 느린 가상 머신에서 실행되는 Python 바이트 코드 대신 CPU에서 직접 실행되는 이진 코드로 컴파일합니다.
이로 인해 속도가 크게 향상되거나 환경이 C / C ++ 코드에 의존하는 동안 Python으로 작업 할 수 있습니다.
컴파일 된 코드를 사용하여 소스 코드에 액세스 할 수없는 사용자에게 배포합니다. 기본적으로 경험이없는 프로그래머가 우연히 무언가를 변경하거나 알려주지 않고 버그를 수정하는 것을 막습니다.
그러나 성능이 주된 이유이며 내가 아는 한 유일한 이유입니다.
일부 파일이 컴파일되지 않으면 Python이 디렉토리 권한 또는 무언가 때문에 .pyc 파일에 쓸 수 없습니다. 또는 컴파일되지 않은 파일은로드되지 않습니다 ... (스크립트 / 모듈은 처음로드 될 때만 컴파일됩니다)
초보자는 .pyc 파일로 인해 Python이 컴파일되었다고 가정합니다. .pyc 파일은 컴파일 된 바이트 코드이며 해석됩니다. 따라서 이전에 Python 코드를 실행하고 .pyc 파일을 편리하게 사용하면 바이트 코드를 다시 컴파일 할 필요가 없으므로 두 번째로 더 빨리 실행됩니다.
컴파일러 : 컴파일러는 고급 언어를 기계 언어로 변환하는 코드입니다.
통역사 : 통역사는 또한 고급 언어를 기계가 읽을 수있는 이진 동등 물로 변환합니다. 인터프리터가 실행될 고급 언어 코드를 얻을 때마다 코드를 기계 코드로 변환하기 전에 코드를 중간 코드로 변환합니다. 코드의 각 부분은 해석 된 다음 순서대로 개별적으로 실행되며 코드의 일부에서 오류가 발견되면 다음 코드 세트를 변환하지 않고 코드의 해석을 중지합니다.
출처 : http://www.toptal.com/python/why-are-there-so-many-pythons http://www.engineersgarage.com/contribution/difference-between-compiler-and-interpreter
참고 URL : https://stackoverflow.com/questions/471191/why-compile-python-code
'Programing' 카테고리의 다른 글
C #에서 문자열을 여러 문자 구분 기호로 나누려면 어떻게합니까? (0) | 2020.04.17 |
---|---|
미래와 약속의 차이점은 무엇입니까? (0) | 2020.04.17 |
Java Regex에서 matches ()와 find ()의 차이점 (0) | 2020.04.17 |
HttpURLConnection에 대한 헤더 추가 (0) | 2020.04.17 |
NERDTree 새 파일을 다시로드 (0) | 2020.04.17 |