컴파일 된 .pyc 파일을 생성하지 않고 파이썬 인터프리터를 실행할 수 있습니까?.pyc 파일을 피하는 방법은 무엇입니까?
답변
를 "-B"옵션을 통과, 또는 설정하여 설정할 수 있습니다
파이썬은 지금 기록 된 .pyc 또는지며 .pyo 파일을 방지 할 수해석기에 -B 스위치를 제공하거나 인터프리터를 실행하기 전에 PYTHONDONTWRITEBYTECODE 환경 변수를 으로 설정하면됩니다. 이 설정은 파이썬 프로그램에
sys.dont_write_bytecode
변수로 사용할 수 있으며 파이썬 코드는 값을 으로 변경하여 인터프리터의 동작을 수정할 수 있습니다.
업데이트 2010-11-27 : 파이썬 3.2 주소 특별한 __pycache__
하위 폴더를 도입하여 .pyc
파일과 소스 폴더를 어지럽히고의 문제, What's New in Python 3.2 - PYC Repository Directories를 참조하십시오.
내가 아는 한, 파이썬은 모든 모듈을 "가져 오기"합니다. 그러나 파이썬은 "python script.py"를 사용하여 실행되는 파이썬 스크립트를 컴파일하지 않습니다 (그러나 스크립트가 가져 오는 모든 모듈을 컴파일합니다).
진짜 질문은 파이썬이 모듈을 컴파일하지 않기를 바라는 이유입니다. 그들이 방해가되면 청소 방법을 자동화 할 수 있습니다.
내가 자주 발견에 다음과 같은 사용. 어떤 이유로 클래스/모듈을 변경할 때'.pyc' 파일이 업데이트되지 않습니다. 따라서'.py' 파일을 변경 한 후에 가져올 때 여전히'.pyc' 파일을 사용하여 오류가 발생합니다 –
모듈이 존재하는 디렉토리를 파이썬 인터프리터가 실행중인 사용자의 읽기 전용으로 만들 수 있습니다.
나는 더 우아한 옵션이 있다고 생각하지 않습니다. PEP 304은 간단한 옵션을 도입하려는 시도 인 것처럼 보였지만 버려진 것 같습니다.
당신이 해결하려고하는 다른 문제가 있다고 생각합니다.이 문제를 해결하려면 .py [co]가 해결 방법 인 것처럼 보이지만, 원래 문제가 무엇이든간에 공격하는 것이 좋습니다.
2.5에서는 사용자가 디렉토리에 대한 쓰기 권한을 부여하지 않는 등의 조치 이외에는 아무 것도 표시하지 않습니다.
그러나 파이썬 2.6 및 3.0에서는 "dont_write_bytecode"라는 sys 모듈의 설정이있을 수 있습니다.이 설정은 이것을 억제하도록 설정할 수 있습니다. 이것은 또한 "What’s New in Python 2.6 - Interpreter Changes"에서 환경 변수 "PYTHONDONTWRITEBYTECODE"
실제로 파이썬 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 파일이 포함되어 있지 않으면 가져 오기가 다소 느릴 수 있습니다.
따라서 파일을 압축하고 sys.path에 zip 파일을 추가 한 다음 가져 오기 만하면됩니다.
UNIX 용으로 작성하는 경우이 처방을 사용하여 스크립트를 패키징하는 것을 고려해보십시오. unix zip executable, stdin을 사용하거나 sys.args에서 아무것도 읽지 않으려 고하면이 스크립트를 조정해야 할 수도 있습니다 너무 많은 문제없이 CAN을 수행 할 수 있습니다.)
내 경험으로 보면 성능이 너무 좋아졌지만 이렇게 큰 모듈을 가져 오기 전에 두 번 생각해야합니다.
import sys
sys.dont_write_bytecode = True
가져온 모듈에 대해서는 작동하지 않습니다. –
방금 시도했지만 가져온 모듈에서 작동합니다. 특히이 변수가 설정되면 나중에 가져온 항목은 pyc 파일을 생성하지 않습니다. 이것은 즐겁습니다. 감사. –
부모 모듈에 추가하기보다는 참조 된 스크립트에 추가하십시오. 멋지다. @te wilson 덕분에 – Sathy
나는 테스트 스위트에서 몇 가지 테스트 케이스를 가지고 있고이 같은 맥 터미널에서 테스트 스위트 실행하기 전에 : 명령이 방법을 실행
python LoginSuite.py
을 내 디렉토리가 채워지했다 .pyc 파일. 나는 아래 명시된 방법을 시도하고이 문제를 해결 : 당신은 테스트 스위트에 테스트 케이스를 가져 오기 및 명령 줄에서 제품군을 실행하는 경우
python -B LoginSuite.py
이 방법은 작동합니다.
소스에 sys.dont_write_bytecode = True
을 설정할 수 있지만로드 된 첫 번째 파이썬 파일에 있어야합니다. python somefile.py
을 실행하면 somefile.pyc
을 얻지 못할 것입니다.
setup.py
및 entry_points=
을 사용하여 유틸리티를 설치하면 시작 스크립트에 sys.dont_write_bytecode
이 설정됩니다. 따라서 setuptools에 의해 생성 된 "기본"시작 스크립트에 의존 할 수 없습니다.
python -B somefile.py
somefile.pyc
.pyc
파일도 가져 오지 : 당신이 인수 자신을 파이썬 파일을 파이썬을 시작하면
당신은 -B
를 지정할 수 있습니다.
일부 유틸리티 myutil
이 있는데 변경할 수 없다면 파이썬 인터프리터에 -B가 전달되지 않습니다. 그냥 환경 변수 PYTHONDONTWRITEBYTECODE
를 설정하여 시작합니다
PYTHONDONTWRITEBYTECODE=x myutil
(우분투 16.04 및 Windows 10에서 테스트) ipython 6.2.1 using python 3.5.2
에 대한 해결책 : ipython
통역원으로 또는 시작시 설정 한 경우 %env PYTHONDONTWRITEBYTECODE =1
을 존중하지 않는
Ipython
~/.ipython/profile-default/startup/00-startup.ipy
. 대신이`오래된 바이트 코드 파일 만 .pyc`하는 당신의 ~.ipython/profile-default/startup/00-startup.py
import sys
Sys.dont_write_bytecode=True
- 1. 파이썬의 다른 버전에서 * .pyc 파일을 가져 오는 방법은 무엇입니까?
- 2. PYC 파일
- 3. typedef를 피하는 방법은 무엇입니까?
- 4. SynchronizationLockException을 피하는 방법은 무엇입니까?
- 5. readlines() 사용을 피하는 방법은 무엇입니까?
- 6. .pyc 파일이있는 WSGI
- 7. 음수 값을 피하는 방법은 무엇입니까?
- 8. 이중 요청을 피하는 방법은 무엇입니까?
- 9. jquery에서 깜박임을 피하는 방법은 무엇입니까?
- 10. Assembly.LoadFrom 차단을 피하는 방법은 무엇입니까?
- 11. 오라클에서 중복을 피하는 방법은 무엇입니까?
- 12. cx_Freeze 및 PYC/PYD 파일
- 13. Flash CS5의 무한 루프를 피하는 방법은 무엇입니까?
- 14. NERDTree에서 확장자별로 파일을 필터링하는 방법은 무엇입니까?
- 15. 공백을 유발하는 속도 코드를 피하는 방법은 무엇입니까?
- 16. XSLT에서 빈 속성 생성을 피하는 방법은 무엇입니까?
- 17. 압축에서 thumbs.db 파일을 피하는 방법
- 18. 해당 py를 옮길 때 pyc 파일을 자동으로 삭제합니다 (Mercurial)
- 19. MacPorts에서 불필요한 종속성을 피하는 방법은 무엇입니까?
- 20. 유사한 ISR간에 코드 중복을 피하는 방법은 무엇입니까?
- 21. 과도한 매개 변수 전달을 피하는 방법은 무엇입니까?
- 22. 프로세스의 쉘 실행을 피하는 방법은 무엇입니까?
- 23. 시스템 날짜 종속성을 피하는 방법은 무엇입니까?
- 24. 사이트 등록에서 공개 이메일을 피하는 방법은 무엇입니까?
- 25. 내부 클래스의 이름 충돌을 피하는 방법은 무엇입니까?
- 26. 프로그램의 여러 인스턴스를 피하는 방법은 무엇입니까?
- 27. Java에서 코드 디버깅을 피하는 방법은 무엇입니까?
- 28. WCF에서 시간 초과를 피하는 방법은 무엇입니까?
- 29. PHP 전역 객체 사용을 피하는 방법은 무엇입니까?
- 30. JAXB schemagen 사용시 상속을 피하는 방법은 무엇입니까?
적어도 OS X 10.8에서 Python 2.7을 실행하면 환경 변수가 영향을 미치지 않습니다. – sorin
(C++ 프로그램에서) 인터프리터를 임베드하는 경우 "Py_DontWriteBytecodeFlag = 1;"을 사용하십시오. 귀하의 소스 코드에.이것은 pydebug.h에 선언 된 전역적인 int입니다. – JimB
그래, 이건 절대 작동하지 않습니다. – tar