Alan Hou的个人博客

Python RuntimeError: Python is not installed as a framework报错

Python RuntimeError: Python is not installed as a framework报错

报错信息:

RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ

首先要确定安装了matplotlib:

pip install matplotlib

此报错出现在使用virtualenv的情况下,以下解决方案中的/usr/local/bin/python等目录可能需要按照实际安装路径进行调整:

#方法一:在用户的.bash_rc或.bash_profile下添加如下代码并source一下:
function frameworkpython {
    if [[ ! -z "$VIRTUAL_ENV" ]]; then
        PYTHONHOME=$VIRTUAL_ENV /usr/local/bin/python "$@"
    else
        /usr/local/bin/python "$@"
    fi
}

方法二
在virtualenv的bin目录下新建frameworkpython文件并添加如下代码并source一下,如/Users/alan/.virtualenvs/machinelearning/bin/目录
#!/bin/bash
# what real Python executable to use
PYVER=2.7
PATHTOPYTHON=/usr/local/bin/
PYTHON=${PATHTOPYTHON}python${PYVER}

# find the root of the virtualenv, it should be the parent of the dir this script is in
ENV=<code>$PYTHON -c &quot;import os; print(os.path.abspath(os.path.join(os.path.dirname(\&quot;$0\&quot;), '..')))&quot;</code>

# now run Python with the virtualenv set as Python's HOME
export PYTHONHOME=$ENV
exec $PYTHON &quot;$@&quot;

但以上两种方案仅在命令行中执行有效,而我们常常需要在PyCharm中编辑调试,这样就会很不方便,更为简单的方案是:

#一、执行如下命令
echo "backend: TkAgg" > ~/.matplotlib/matplotlibrc
#二、在文件上方添加
import matplotlib
matplotlib.use('TkAgg')

测试代码(来自小象学院邹博《机器学习》):

import math
import matplotlib.pyplot as plt

if __name__ == "__main__":
    x = [float(i)/100.0 for i in range(1,300)]
    y = [math.log(i) for i in x]
    plt.plot(x, y, 'r-', linewidth=3, label="log curve")
    a = [x[20], x[175]]
    b = [y[20], y[175]]
    plt.plot(a, b, 'g-', linewidth=2)
    plt.plot(a, b, 'b*', markersize=15, alpha=0.75)
    plt.legend(loc='upper left')
    plt.grid(True)
    plt.xlabel('X')
    plt.ylabel('log(X)')
    plt.show()
退出移动版