私は、cProfileがexecfile()を利用していることを確信しています。ヒントは、ドキュメント(http://docs.python.org/library/profile.html)から来ている:
This function takes a single argument that can be passed to the exec statement
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
profile/cProfileを.pycまたは.pyoに対して実行するというケースは、たぶん決して扱われていなかったでしょう。なぜそれが当てはまるのかについての標準的な説明は見つかりませんでしたが、メインスクリプトは、cPythonインタープリタが動作する方法のためにバイトコンパイルされないことが一般的に予想されます。インタプリタは自動的にメインスクリプトをバイトコンパイルしませんが、インポートされたモジュールに対しては自動的にバイトコンパイルします。ここでトピックに関する質問があります:Why does Python compile modules but not the script being run?
問題を回避するには、プロファイルする.pyoで通常実行していたものをmainとして呼び出すスクリプトを起動することができます。公開されたコードはかなり簡単です。
launch.py
import foo
foo.call_my_func()
そして実行します。
python -m cProfile -o ./temp/PROFILE.log launch.py
私はlaunch.pyファイルが、Pythonでxyz.pyoファイルをインポートしようとしたが、私は ' はImportErrorをエラー得られます。 xyzという名前のモジュールがありません ' xyz.pyoのplaeにxyz.pyを置くと、pythonは満足しています @ jeremy-brown – Kashif
@Kashif: 'xyz.pyo'(' .pyc'や '.py'ではなく)をインポートするには、Pythonを' -OO'で実行する必要があります – xOneca