12

Python 3 スクリプトで cProfile を実行し、うまく機能した後、runsnake を使用して視覚化しようとしました。ただし、空の画面と「不正なマーシャル データ」というエラーが表示されました。

.pyc ファイルを削除しましたが、それも機能しませんでした。

runsnake のインストールに使用したコードは次のとおりです。

    sudo apt-get install python-profiler python-wxgtk2.8 python-setuptoolD
    sudo easy-install installSquareMap RunSnakeRun

UBUNTUを使用しています。

どうもありがとう。

注:py3kがアクティブ化されている間にすべてをインストールしたことを追加する必要があります

4

2 に答える 2

13

TL;DR: このエラーは、Python 2.x でプロファイリングを行い、Python 3.x でプロファイルを表示している場合、またはその逆の場合に発生します。

私も同じ問題を抱えていました。私の知る限り、RunSnakeRun パッケージは Python3 に移植されていません。少なくとも、python2 にはピップできましたが、python3 (SyntaxError) にはピップできませんでした。また、cProfile の出力形式は python 2/3 間で互換性がないと思います。これの決定的な確認を見つけるのに時間はかかりませんでしたが、cProfile class pstats.Stats(*filenames, stream=sys.stdout)のドキュメントでは、「上記のコンストラクターによって選択されたファイルは作成されている必要があります具体的には、このプロファイラーの将来のバージョンとのファイル互換性は保証されておらず、他のプロファイラーによって生成されたファイルとの互換性もありません。」. これがあなたの問題の原因のようです。たとえば、python3からプロファイル出力を作成しました

import cProfile
cProfile.run('some code to profile', 'restats')

RunSnakeRun でそれを開こうとすると、同じ marhsal エラーが発生しました。さらに、もし私が

import pstats
p = pstats.Stats('restats')
p.strip_dirs().sort_stats(-1).print_stats()

python3では、それは魅力のように機能します。私がpython2でそれを行うと、マーシャルエラーが発生します。現在、RunSnakeRun は python2 で実行されます (python3 で実行する方法が見つからない場合)。したがって、私の推測では、あなたは python3 でプロファイリングを実行し、それらを分析するために python2 に依存するツールを使用しています。これらのツールは、出力が python2 と互換性があることを期待しています。

RunSnakeRun プロジェクトは現在しばらく活動していないようで (ホームページの著作権は 2005 年から 2011 年です)、それが python3 に移植されるという兆候はありません。 Python3 で開発したい場合に役立ちます。KCachegrindと組み合わせたpyprof2calltreeは、Linux でうまく機能しました。RunSnakeRun から得られるのと同様のプロファイリング出力の視覚的ビューを提供できます。

于 2015-10-14T09:02:56.773 に答える