我的脚本需要导入numpy
,sklearn
和matplotlib
,但我无法安装sklearn。对我的问题http://https://stackoverflow.com/questions/38733220/difference-between-scikit-learn-and-sklearn的一个非常有用的回答解释说我需要重新安装numpy。使用pip更新numpy失败,因为OS X 10.11 SIP阻止卸载当前的numpy。 mfripp http://https://apple.stackexchange.com/questions/209572/how-to-use-pip-after-the-os-x-el-capitan-upgrade对pip和SIP问题的非常有用的答案提供了该问题的详细解决方案。我完全按照这些说明操作,并使用pip
为所有用户重新安装numpy
,matplotlib
,scipy
和sklearn
。
当我使用命令
运行完成的脚本时python DistMatPlot.py Random10A.matrix Random10A.pdf
脚本运行完美,编写了所有预期的输出文件。
然而,我总是看到:
“/库/ Python的/ 2.7 /站点包/ matplotlib / font_manager.py:273: UserWarning:Matplotlib正在使用fc-list构建字体缓存。这个 可能需要一点时间。 warnings.warn('Matplotlib正在构建字体 使用fc-list缓存。这可能需要一点时间。')“
我在更新numpy,matplotlib等之前从未见过其他matplotlib脚本.2秒延迟只是有点烦人。
我使用pyinstaller编译了一个冻结的二进制文件,在编译期间,我得到了几条类似于上面的消息。 生成的冻结二进制运行失败,命令为:
./ DistMatPlot Random10A.matrix Random10A.pdf
产生了以下内容:
/var/folders/8x/7_zp_33h8xj6td0059b72p9h0000gp/T/_MEIhIysTV/matplotlib/font_manager.py:273: UserWarning:Matplotlib正在使用fc-list构建字体缓存。这个 可能需要一点时间。 Traceback(最近一次调用最后一次):文件 文件中的第13行“” “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py” 第389行,在load_module中 exec(字节码,模块。字典)文件“matplotlib / pyplot.py”,第114行,文件“matplotlib / backends / init .py”,行 32,在pylab_setup文件中 “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py” 第389行,在load_module中 exec(字节码,模块。字典)文件“matplotlib / backends / backend_macosx.py”,第24行,在文件中 “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py” 第546行,在load_module中 module = imp.load_module(fullname,fp,filename,ext_tuple)RuntimeError:Python未作为框架安装。 Mac OS X. 如果没有Python,后端将无法正常运行 作为框架安装。有关更多信息,请参阅Python文档 有关在Mac OS X上安装Python作为框架的信息。请 要么重新安装Python作为框架,要么尝试其中一个 后端。如果您在虚拟环境中使用Matplotlib 参见“在虚拟环境中使用Matplotlib” Matplotlib FAQ DistMatPlot返回-1
我查看了类似的问题并尝试了他们建议的解决方案无济于事。
(1)为什么matplotlib每次运行都需要重建字体缓存?
(2)为什么在脚本本身成功时冻结的二进制文件会失败?运行pyinstaller时,我还需要除-F之外的其他选项吗?
答案 0 :(得分:0)
冻结二进制文件的问题原来是“RuntimeError:Python没有作为框架安装。”
有几个帖子讨论了这个问题,并建议在“将matplotlib.pyplot导入为plt”之前添加这两行:
导入matplotlib
matplotlib.use( 'TkAgg')
这不起作用,但这种轻微修改确实有效:
import matplotlib
matplotlib.use( '此Agg')
我怀疑'Agg'可能特定于OS X或OS X 10.11附带的python版本