找不到Python站点包模块

时间:2012-11-03 03:06:58

标签: python python-2.7

我遇到麻烦主要是因为我对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模块的问题,而是关于我做错了什么并且配置错误的更多信息?我正在使用OSX 10.8.2和Python 2.7。

这就是我的“哪个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中的模块。 (??)

但是如果模块位于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/bin/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

3 个答案:

答案 0 :(得分:2)

我假设您有导入声明? from memory_profiler import profiler ...从阅读你的问题看来,你认为python会自动从PYTHONPATH中的所有模块中导入所有内容,而不是因为这会占用太多内存,如果两个模块具有相同的内容功能

修改

所以看起来@profiler装饰器工作的唯一方法是从命令行运行程序......

python -m memory_profiler example.py

如果要在脚本中使用memory_profiler,请参阅此示例。 https://github.com/fabianp/memory_profiler/blob/master/examples/plot_memory.py

答案 1 :(得分:2)

在以前版本的line_profiler中,您必须从@johnthexii指出的命令行运行它。从命令行运行它仍然是运行探查器的推荐方法(因为它在解释器中设置了一些未设置的钩子),但现在也可以将装饰器导入为

from memory_profiler import profile

答案 2 :(得分:0)

我遇到了类似的问题,但结果是我将 memory_profiler 安装到 python3 而不是 2。
并指定python版本解决了这个问题。

>>> python -m memory_profiler test.py
/usr/bin/python: No module named memory_profiler
>>> python3 -m memory_profiler test.py
Filename: test.py

Line #    Mem usage    Increment  Occurences   Line Contents
============================================================
     1   19.930 MiB   19.930 MiB           1   @profile
     2                                         def my_func():
     3   27.406 MiB    7.477 MiB           1       a = [1] * (10 ** 6)
     4  180.031 MiB  152.625 MiB           1       b = [2] * (2 * 10 ** 7)
     5   27.586 MiB -152.445 MiB           1       del b
     6   27.586 MiB    0.000 MiB           1       return a