cProfile が execfile() を利用していると確信しています。ヒントはドキュメント ( http://docs.python.org/library/profile.html )から得られます。
この関数は、 exec
ステートメントに渡すことができる単一の引数を取ります
execfile() は *.pyc および *.pyo ファイルを実行できません - 同じ例外で失敗します。
>>> 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 に対して profile/cProfile を実行するユース ケースは、おそらく対処されていません。その理由についての標準的な説明は見つかりませんでしたが、cPython インタープリターの動作方法のために、メイン スクリプトは通常、バイト コンパイルされないと予想されます。インタープリターは、メイン スクリプトを自動的にバイト コンパイルしませんが、インポートされたモジュールに対しては行います。トピックに関する SO の質問は次のとおりです。なぜ Python はモジュールをコンパイルするのに、実行されているスクリプトはコンパイルしないのですか?
問題を回避するには、起動スクリプトを使用して、プロファイリングする .pyo で通常メインとして実行するものを呼び出すことができます。公開されたコードは非常に簡単です。
launch.py
import foo
foo.call_my_func()
そして実行します:
python -m cProfile -o ./temp/PROFILE.log launch.py