[python] .pyc 파일을 피하는 방법?

컴파일 된 .pyc 파일을 생성하지 않고 파이썬 인터프리터를 실행할 수 있습니까?



답변

에서 “파이썬 2.6의 새로운 기능 – 통역 변경” :

Python은 이제 -B 스위치를 Python 인터프리터에 제공하거나 인터프리터 를 실행하기 전에 PYTHONDONTWRITEBYTECODE 환경 변수를 설정하여
.pyc 또는 .pyo 파일을 쓰지 못하게 할 수 있습니다 . 이 설정은 Python 프로그램에서 sys.dont_write_bytecode변수 로 사용할 수
있으며 Python 코드는 값을 변경하여 인터프리터의 동작을 수정할 수 있습니다.

업데이트 2010-11-27 : Python 3.2 .pyc는 특수 __pycache__하위 폴더 를 도입하여 파일로 소스 폴더를 복잡하게 만드는 문제를 해결합니다 . Python 3.2-PYC 리포지토리 디렉토리의 새로운 기능을 참조하십시오 .


답변

import sys

sys.dont_write_bytecode = True


답변

실제로 파이썬 2.3 이상에서 그것을 할 수있는 방법이 있지만 약간 난해합니다. 이것을 알고 있는지 모르겠지만 다음을 수행 할 수 있습니다.

$ unzip -l /tmp/example.zip
 Archive:  /tmp/example.zip
   Length     Date   Time    Name
 --------    ----   ----    ----
     8467  11-26-02 22:30   jwzthreading.py
 --------                   -------
     8467                   1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32) 
>>> import sys
>>> sys.path.insert(0, '/tmp/example.zip')  # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'

zipimport 라이브러리 에 따르면 :

ZIP 아카이브에는 모든 파일이있을 수 있지만 .py 및 .py [co] 파일 만 가져올 수 있습니다. 동적 모듈 (.pyd, .so)의 ZIP 가져 오기는 허용되지 않습니다. 아카이브에 .py 파일 만 포함 된 경우 Python은 해당 .pyc 또는 .pyo 파일을 추가하여 아카이브를 수정하려고 시도하지 않습니다. 즉, ZIP 아카이브에 .pyc 파일이 없으면 가져 오기 속도가 느려질 수 있습니다.

따라서 파일을 압축하고 zip 파일을 sys.path에 추가 한 다음 가져 오기만하면됩니다.

유닉스 용으로 빌드한다면, unix zip executable 레시피를 사용하여 스크립트 패키징을 고려할 수도 있지만 stdin을 사용하거나 sys.args에서 무엇이든 읽을 계획이라면 이것을 조정해야 할 수도 있습니다. 너무 많은 어려움없이 수행).

내 경험상 성능으로 인해 많은 어려움을 겪지 않지만 이렇게 큰 모듈을 가져 오기 전에 두 번 생각해야합니다.


답변

2.5에서는 사용자에게 디렉토리에 대한 쓰기 권한을 부여하지 않는 등의 조치 외에는이를 억제 할 방법이 없습니다.

그러나 파이썬 2.6 및 3.0에서는 sys 모듈에 “dont_write_bytecode”라는 설정이있을 수 있으며이를 억제하도록 설정할 수 있습니다. “-B”옵션을 전달하거나 환경 변수 “PYTHONDONTWRITEBYTECODE”를 설정하여 설정할 수도 있습니다.


답변

sys.dont_write_bytecode = True소스에서 설정할 수 있지만로드 된 첫 번째 파이썬 파일에 있어야합니다. 당신이 실행 python somefile.py하면 얻을 수 없습니다 somefile.pyc.

당신이 사용하는 유틸리티를 설치할 때 setup.pyentry_points=당신은 설정 한 것입니다 sys.dont_write_bytecode시작 스크립트에서. 따라서 setuptools에서 생성 한 “기본”시작 스크립트에 의존 할 수 없습니다.

파이썬 파일을 인자로 파이썬을 시작하면 다음을 지정할 수 있습니다 -B.

python -B somefile.py

somefile.pyc어쨌든 생성되지 않지만 .pyc다른 파일의 파일도 가져 오지 않습니다 .

유틸리티가 myutil있고 변경할 수 없으면 -B를 파이썬 인터프리터로 전달하지 않습니다. 환경 변수를 설정하여 시작하십시오 PYTHONDONTWRITEBYTECODE.

PYTHONDONTWRITEBYTECODE=x myutil


답변

테스트 스위트에 여러 테스트 사례가 있으며 Mac 터미널에서 테스트 스위트를 실행하기 전에 다음과 같이하십시오.

python LoginSuite.py

이 방법으로 명령을 실행하면 내 디렉토리에 .pyc 파일이 채워집니다. 아래 명시된 방법을 시도하고 문제를 해결했습니다.

python -B LoginSuite.py

이 방법은 테스트 사례를 테스트 스위트로 가져오고 명령 행에서 스위트를 실행하는 경우 작동합니다.


답변

Python 3.8 부터 환경 변수 PYTHONPYCACHEPREFIX를 사용하여 Python의 캐시 디렉토리를 정의 할 수 있습니다 .

파이썬 문서에서 :

이것이 설정되면, 파이썬은 소스 트리 내의 pycache 디렉토리 대신이 경로의 미러 디렉토리 트리에 .pyc 파일을 작성합니다 . 이것은 -X pycache_prefix = PATH 옵션을 지정하는 것과 같습니다.

./profileLinux에서 다음 줄을 추가하면 :

export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"

파이썬은 __pycache__프로젝트 디렉토리에 성가신 디렉토리를 만들지 않고 대신 모든 디렉토리를 배치합니다~/.cache/cpython/