답변:
에서 "파이썬 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 리포지토리 디렉토리의 새로운 기능을 참조하십시오 .
export PYTHONDONTWRITEBYTECODE=1
import sys
sys.dont_write_bytecode = True
site-packages/usercustomize.py
모든 스크립트에 적용하려면 이것을 추가하십시오 . 나를 위해,이 디렉토리는 $HOME/.local/lib/python2.6/site-pacakges/usercustomize.py
입니다. Cf. docs.python.org/2/tutorial/…
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에서 무엇이든 읽을 계획이라면 이것을 조정해야 할 수도 있습니다. 너무 많은 어려움없이 수행).
내 경험상 성능으로 인해 많은 어려움을 겪지 않지만 이렇게 큰 모듈을 가져 오기 전에 두 번 생각해야합니다.
sys.dont_write_bytecode = True
소스에서 설정할 수 있지만로드 된 첫 번째 파이썬 파일에 있어야합니다. 당신이 실행 python somefile.py
하면 얻을 수 없습니다 somefile.pyc
.
당신이 사용하는 유틸리티를 설치할 때 setup.py
와 entry_points=
당신은 설정 한 것입니다 sys.dont_write_bytecode
시작 스크립트에서. 따라서 setuptools에서 생성 한 "기본"시작 스크립트에 의존 할 수 없습니다.
파이썬 파일을 인자로 파이썬을 시작하면 다음을 지정할 수 있습니다 -B
.
python -B somefile.py
somefile.pyc
어쨌든 생성되지 않지만 .pyc
다른 파일의 파일도 가져 오지 않습니다 .
유틸리티가 myutil
있고 변경할 수 없으면 -B를 파이썬 인터프리터로 전달하지 않습니다. 환경 변수를 설정하여 시작하십시오 PYTHONDONTWRITEBYTECODE
.
PYTHONDONTWRITEBYTECODE=x myutil
Python 3.8 부터 환경 변수 PYTHONPYCACHEPREFIX
를 사용하여 Python의 캐시 디렉토리를 정의 할 수 있습니다 .
파이썬 문서에서 :
이것이 설정되면, 파이썬은 소스 트리 내의 pycache 디렉토리 대신이 경로의 미러 디렉토리 트리에 .pyc 파일을 작성합니다 . 이것은 -X pycache_prefix = PATH 옵션을 지정하는 것과 같습니다.
예
./profile
Linux에서 다음 줄을 추가하면 :
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
파이썬은 __pycache__
프로젝트 디렉토리에 성가신 디렉토리를 만들지 않고 대신 모든 디렉토리를 배치합니다~/.cache/cpython/
ipython 6.2.1 using python 3.5.2
(Ubuntu 16.04 및 Windows 10에서 테스트)에 대한 솔루션 :
Ipython
인터프리터 %env PYTHONDONTWRITEBYTECODE =1
에서 설정 ipython
하거나에서 시작하는 동안 존중하지 않습니다 ~/.ipython/profile-default/startup/00-startup.ipy
. 대신에 다음을 사용하십시오.~.ipython/profile-default/startup/00-startup.py
import sys
sys.dont_write_bytecode=True
내가 아는 한 파이썬은 "가져온"모든 모듈을 컴파일 할 것이다. 그러나 python은 "python script.py"를 사용하여 python 스크립트 실행을 컴파일하지 않습니다 (그러나 스크립트가 가져 오는 모든 모듈을 컴파일합니다).
실제 질문은 파이썬이 모듈을 컴파일하지 않기를 원하는 이유입니다. 방해가되는 경우 이러한 청소 방법을 자동화 할 수 있습니다.
.pyc
파일 이 있다는 것을 자주 발견했습니다 . 어떤 이유로 클래스 / 모듈을 변경하면 .pyc
파일이 업데이트되지 않습니다. 따라서 .py
파일 을 변경 한 후 가져 오면 파일을 계속 사용하여 .pyc
오류가 발생합니다