2011-08-05 2 views
3

파이썬 컴파일 된 객체 (.pyc)가있는 이유를 이해할 수 없기 때문에 필자는 파이썬 인터프리터에 대해 읽었습니다.바이트 코드 컴파일을 적용하기위한 Python 프랙티스? (.pyc)

나는 내 질문에 대한 답을 얻었으나 지금은 혼란 스럽다. 좋아요. 인터프리터는 스크립트를 모듈에 컴파일합니다.이 코드를 제대로 이해하고 있다면 C의 객체와 같은 '일종의'입니다 (C 프로그래머, 파이썬을 처음 사용하는 경우). 자바에서 네이티브 명령이 아닌 바이트 코드를 컴파일하기 때문에 ... 어쨌든 스크립트를 가져올 때 또는 명시 적으로 컴파일하도록 호출하는 경우 (이는 다소 불리한 이유가 있음) 어쨌든이 작업을 수행합니다.

그렇다면 컴파일 된 바이트 코드간에 런타임 차이가 있습니까? 단 하나의 인터프리터 (바이트 코드 인터프리터) 만 있다고 가정하면, 모듈이 아직 컴파일되지 않았다면, 해석을하기 전에 문법/렉싱/파싱 (컴파일)을해야한다는 것을 의미합니다. 실행 시간이 길어질 수 있습니까?

위 사실을 취한다면 모듈이 .pyc로 컴파일되고 표준 .py 스크립트로 실행되지 않는 것이 가장 분명합니다.

가능한 한 주행에 최소 실행을하는 것이 가장 좋습니다.

진입 점에 하드 코어 논리가있는 경우 (예 : 내 트리가 두 개 트래버스되고 기타 무거운 비교) 엔트리 포인트가 자체 컴파일되지 않도록 포장해야합니까? 대신에,이다

:

# file.py: 
def main(): 
    <stuff goes here - setup, whatever shared resources different modules need, etc.> 

main() 

는 어떻게해야 좋을 것이다 :

# wrapper.py: 
from file.py import * 
main() 

이 희망 나는 충분히 잘, 부탁 해요 무엇을 설명했다. 인터프리터/컴파일러가 파이썬에서 어떻게 사용되는지에 대한 잘못된 이해가 있었을 가능성이 있습니다.이 질문은 합리적이지 않습니다. 저는 파이썬을 처음 접했습니다.

TIA

답변

6

당신이 올바른지 :

1) 된 .pyc 파일이 된 .pyc 파일이 생성)

2 바이트 코드 파이썬 소스의 컴파일의 캐시 된 사본 인 경우 모듈 따라서 메인 프로그램이 C 인 된 .pyc

4)로 컴파일되지

3) 파이썬 명령 줄에 이름을 메인 프로그램을 가져옵니다 그것이 실행될 때마다 섞여 있습니다.

그러나 : 메인 프로그램은 메인 프로그램의 모든 실행에 지속적으로 부담이없는 바이트 코드로 컴파일 한 후 바이트 코드가 해석되므로 단지 작은 오버 헤드 (컴파일)이있다

. 컴파일을위한 여분의 시간은 파일의 라인 수에 비례하며, 라인이 실행되는 시간 수는 아닙니다.

tl; dr : 걱정하지 마십시오.

+0

나는 당신이 말하는, 네드, 스크립트/모듈 인터페이스를 구동 로직의 좋은 금액을 가지고 드라이버 파일 (만약에 당신 당신의 '주') 경우와하는지 이해하지만 다른 모듈의 실행 순서에 따라 달라 지므로 런타임마다 컴파일해야하는 추가 복잡성이 있습니다. 그래서 내 질문에 회귀해야하고 처음에 호출 된 스크립트가 기본 방법 인 것을 단순히 가져오고 단순히 "main()"이라는 줄이 있다면 가장 효율적인지 물어보십시오. 대답은 내가 생각한 것 같습니다 : 예. – Syndacate

+0

네, 메인 파일을 작게 유지하는 것이 가장 효율적입니다. 그러나 메인 파일에서 더 많은 로직을 사용할수록, 컴파일 시간은 실행 시간만큼 작아 질 것입니다. 하나의 파이썬 파일을 컴파일하는 것은 가장 복잡한 파일조차도 오래 걸리지 않습니다. 대규모 생산 시스템에서는 문제가되지 않습니다. 코드가 작동하도록 작성한 다음 가독성과 유지 보수성에 대해 걱정하십시오. –

+0

나에게 별도의 래퍼 파일에 한 줄짜리 주 함수 호출이 있더라도 가독성이나 유지 보수성을 저해하지는 않지만 실행 시간을 단축 할 수있다. 오늘 저는 몇 가지 번호를 사용했습니다. 직접 호출로 약 .75 초가 걸리므로 주 드라이버 스크립트를 즉시 컴파일해야합니다. 다른 한 편으로 약 5 초가 걸린다. 하나의 파일을 하나의 파일로 호출하고 실행했다. I7 2600k - Win7 64 및 8GB @ 1333에서의 파이썬 3.2 결과. 숫자가 지속될 때 나는 훨씬 더 놀랐다. – Syndacate

0

이 초보자를위한,

파이썬은 자동으로 실행하기 전에, 그래서 바이트 코드라고 컴파일 된 코드에 스크립트를 컴파일합니다.

스크립트 실행은 가져 오기로 간주되지 않으므로 .pyc가 생성되지 않습니다.

예를 들어 다른 모듈 xyz.py를 가져 오는 abc.py 스크립트 파일이있는 경우 abc.py를 실행하면 xyz를 가져 오기 때문에 xyz.pyc가 만들어 지지만 abc.pyc 파일은 만들어지지 않습니다 abc.py가 임포트되지 않기 때문에 생성됩니다.

가져 오지 않은 모듈에 .pyc 파일을 만들어야하는 경우 py_compile 및 compileall 모듈을 사용할 수 있습니다.

py_compile 모듈은 모든 모듈을 수동으로 컴파일 할 수 있습니다. 당신이 할 수있는 (이 abc.py 같은 위치에 .pyc 파일을 작성합니다

import py_compile 

py_compile.compile ('abc.py') : 한 가지 방법은 대화 형으로 해당 모듈의 py_compile.compile 기능을 사용하는 것입니다 선택적 매개 변수 cfile로 대체하십시오. 자세한 내용은

: http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm

관련 문제