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/Python /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 的 @profile 装饰器会导致错误