2

私は主に Python と OSX の経験が浅いために問題を抱えており、すべてがどのように機能するかを理解しようとしています。

最終的な目標は、このモジュールを実行することです: http://pypi.python.org/pypi/memory_profiler、モジュールが見つからないことを除いて。

手始めに、easy_installを実行し、すべてが正常にインストールされました。

easy_install -U memory_profiler # pip install -U memory_profiler

次に、ボールを転がすためだけに example.py ファイルを作成しました。

@profile
def my_func():
    return 2

if __name__ == '__main__':
    my_func()

実行しようとしましたが、次のエラーが発生しました。

$ python example.py

Traceback (most recent call last):
  File "example.py", line 2, in <module>
    @profile
NameError: name 'profile' is not defined

これは memory_profiler モジュールに関する質問ではありませんが、何が間違っていて、正しく構成されていないのでしょうか? Python 2.7 で OSX 10.8.2 を使用しています。

これは私の「どのpython」が述べていることです:

/Library/Frameworks/Python.framework/Versions/Current/bin/python

これはシンボリック リンクであるため、元のリンクに移動すると、次のようになります。

/Library/Frameworks/Python.framework/Versions/2.7/bin/python

私が混乱しているのは、easy_install が memory_profiler.py ファイルをこのフォルダーに正しく配置したことです。

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

そして、Pythonが実行されると、PYTHONPATHとサイトパッケージでモジュールがチェックされることを理解しています。(??)

しかし、モジュールが site-packages フォルダーにある場合、example.py が機能しないのはなぜですか? また、site-packages フォルダー内のモジュールがパスの一部である必要がある場合、少なくとも memory_profiler.py を実行して Python によって実行されるかどうかを確認できると考えましたが、代わりに次のエラーが発生しました。

python memory_profiler.py
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: 
can't open file 'memory_profiler.py': [Errno 2] No such file or directory

Python が ../2.7/Resources/Python.app/Contents/MacOS/Python にあると述べているため、これも私を混乱させます。 ../2.7/lib/python2.7/site-packages で memory_profiler.py ファイルをチェックしていませんか?

また、これらのフォルダーが両方とも存在するのはなぜですか? また、その違いは何ですか?

/System/Library/Frameworks/Python.framework
/Library/Frameworks/Python.framework

パズルの大きなピースが欠けているので、正しい方向を示すための助けをいただければ幸いです。

アップデート:

私は除外していました:

from memory_profiler import profiler

おそらく私のボーンヘッドの問題のほとんどですが、今では次のエラーが発生します。

Traceback (most recent call last):
File "example.py", line 1, in <module>
from memory_profiler import profiler
ImportError: cannot import name profiler
4

3 に答える 3

2

以前のバージョンの line_profiler では、@johnthexii が指摘しているように、コマンド ラインから実行する必要がありました。コマンドラインから実行することは、プロファイラーを実行するための推奨される方法です (他の方法では設定されないフックがインタープリターに設定されるため)。

from memory_profiler import profile
于 2013-02-18T20:03:08.653 に答える
2

インポートステートメントがあると思いますか?from memory_profiler import profiler...あなたの質問を読むと、PythonはPYTHONPATH内のすべてのモジュールからすべてを自動的にインポートすると思われるようですが、それはメモリを大量に消費し、2つのモジュールが同じ機能を持っている場合はどうなるか.

編集

したがって、 @profiler デコレータが機能する唯一の方法は、コマンドラインからプログラムを実行する場合です...

python -m memory_profiler example.py

スクリプト内から memory_profiler を使用する場合は、この例を参照してください。https://github.com/fabianp/memory_profiler/blob/master/examples/plot_memory.py

于 2012-11-03T03:13:17.540 に答える