Python line_profiler 找不到模块

Posted

技术标签:

【中文标题】Python line_profiler 找不到模块【英文标题】:Python line_profiler not finding module 【发布时间】:2017-05-18 01:06:58 【问题描述】:

我承认这是我的安装失败,很抱歉将这个无趣且无关紧要的问题放在你的脚下,但对于我的一生,我无法弄清楚出了什么问题,并且我已经没有想法了。我希望有人能够快速指出显而易见的事情。

我正在尝试分析一个 python 脚本(使用 Kern 的 line_profiler),并且该脚本需要加载 netCDF4 模块。我已经用 pip 安装了 line_profiler 和 netCDF4。当我为已安装软件包列表排队 pip 时,两者都报告为存在并更新。

不使用分析器,我的脚本运行没有问题,这意味着 netCDF4 模块已正确加载。但是,如果我从“myscript”目录运行“kernprof -l -v myscript.py”,我会收到以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/kernprof", line 9, in <module>
   load_entry_point('line-profiler==1.0', 'console_scripts', 'kernprof')()
  File "Library/Python/2.7/site-packages/kernprof.py", line 221, in main
   execfile(script_file, ns, ns)
  File "myscript.py", line 5, in <module>
   from netCDF4 import Dataset
ImportError: No module named netCDF4 

我正在从 /opt/local/bin/python 的安装中运行 Python,该安装在我的 PATH 中首先列出。

所以,无论如何,如果我设置的默认 Python 版本与我的 PATH 中最先出现的版本相同,并且该默认版本能够访问 netCDF4 模块,为什么不使用 line_profiler?

【问题讨论】:

你能不能导入一些其他的标准模块import os然后print(os.__file__),看看运行分析器时标准库在哪里? print (os._file_) 给出:AttributeError: 'module' object has no attribute '_file_' 好吧,选错了,内置模块:):试试import csv; print(csv.__file__)。另外:import sys; print(sys.executable)。这两个结果都会有所帮助。 print (csv._file_) 也给出了相同的属性错误,但 print (sys.executable) 很有启发性。在没有分析器的情况下运行它会产生/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python,而使用分析器会产生/usr/bin/python。所以我猜下一个问题,是否有一个技巧可以强制 line_profiler 在我设置为“默认”的 Python 版本下运行? 顺便说一句,它是__file__,带有双下划线。不是单身。因此错误... 【参考方案1】:

kernprof 有一个 shebang 重定向到没有所有必需模块的默认 python 安装。

您可以通过执行以下操作强制使用“完整”python 安装:

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/‌​Resources/Python.app‌​/Contents/MacOS/Pyth‌​on /usr/local/bin/kernprof -l -v myscript.py

所以 shebang 被忽略了,你使用包含所有必需包的 python 版本运行分析器。

【讨论】:

以上是关于Python line_profiler 找不到模块的主要内容,如果未能解决你的问题,请参考以下文章

Python Line_profiler 和 Cython 函数

python line_profiler,speedup,timeit

安装python性能检测工具line_profiler

Python 分析:使用 line_profiler 的 @profile 装饰器会导致错误

使用 line_profiler 进行 Python 分析 - 即时删除 @profile 语句的巧妙方法?

S7200编程时找不到添加模似量模块设置