저는 cProfile이 execfile()을 사용한다고 확신합니다. 힌트는 워드 프로세서 (http://docs.python.org/library/profile.html)에서 유래 :
This function takes a single argument that can be passed to the exec statement
execfile() *지며 .pyo 파일을 *의 .pyc 파일 등을 실행할 수 없습니다 - 그것은 같은 예외와 함께 실패합니다.
>>> execfile("myscript.pyc")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tix_email.pyc", line 1
SyntaxError: Non-ASCII character '\xd1' in file tix_email.pyc on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
.pyc 또는 .pyo에 대해 프로필/cProfile을 실행하는 경우는 아마도 해결되지 않았습니다. 왜 그런지에 대한 표준적인 설명을 찾지 못했지만, 메인 스크립트는 일반적으로 cPython 인터프리터가 작동하는 방식 때문에 바이트 컴파일되지 않을 것으로 예상됩니다. 인터프리터는 기본 스크립트를 자동으로 바이트 컴파일하지 않지만 가져온 모듈에 대해서는 그렇게합니다. 주제에 대한 SO 질문은 다음과 같습니다. Why does Python compile modules but not the script being run?
문제를 해결하려면 프로파일 링 할 .pyo에서 일반적으로 main으로 실행했던 스크립트를 호출 할 수 있습니다. 노출 된 코드는 꽤 사소한 것입니다.
launch.py
import foo
foo.call_my_func()
다음 실행 : 나는 launch.py 파일에 xyz.pyo 파일을 가져 오는 시도
python -m cProfile -o ./temp/PROFILE.log launch.py
하지만 파이썬이 날 오류 준다 ' ImportError를 : xyz라는 이름의 모듈이 없습니다 xyz.pyo의 plae에 xyz.py를 넣으면 파이썬이 행복합니다 @ jeremy-brown – Kashif
@Kashif :'xyz.pyo' (그러나'.pyc' 나'.py'가 아닌)를 임포트하려면 Python을 -OO로 실행해야합니다 – xOneca