MacOS 下多 Python 版本说明

好的配置环境是保证产能的前提

应大数据和机器学习的要求,对处理数据的计算机语言需求越来大,之前虽然弄过 Python 环境,但是没有彻底搞清楚 Python 多版本执行程序以及多版本的模块位置,导致自己电脑上环境紊乱,今天花了点功夫解决下。

说明


我的电脑是 MacOS 系统,并且 MacOS 系统是自带了 Python,而之前在捣鼓 Python 时,可能后装了很多次不同的版本,导致在我电脑上的的 Python 有诸多问题,这里主要说明以下几个问题:

  1. 多版本 Python 的安装路径识别
  2. 多版本 Python 对应的 pip 命令识别
  3. 多版本 Python 对应的 pip 安装模块位置确定

安装路径识别

Python 现在分为两个版本 2.X 版本3.X 版本,两代版本并不能够完全兼容,因此两个版本的模块包也会分开安装的,因此完全把握两种版本环境是很有必要的。

Python 2.X版本

此版本对应旧版本,其默认执行命令是 python, 因此我们在终端输入 python --version 通常会显示 2.X 的版本字样。

通过 which python 命令查看 Python 路径,然后用 ls -l 可查看该路径的 Python 执行文件属性如下:

上图显示 /usr/bin/python 文件非软链接文件,由于我们自己安装的 Python 通常是用软链接的方式链接到安装目录,因此这里的 python 应该属于本机自带的 Python, 其安装位置即为 /usr/bin/python.

Python 3.X版本

此版本对应新版本,其默认执行命令是 python3, 不是完全兼容旧版本的,但是代表了 Python 的发展方向,新人的话建议直接学习此版本。

通过 which python3 命令查看 Python3 路径,然后用 ls -l 查看路径的的文件属性:

上图显示 /usr/local/bin/python3 文件为软链接文件,链接的源位置为 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3, 因此这就是 Python3 的安装位置,由此也可以知道当前 Python3 的版本是 3.5.

实际上系统自带的命令通常安装在 /usr/bin/ 目录下,而用户自己安装的命令通常在 /usr/local/bin/ 目录下,这通常是因为普通安装命令都是在 /usr/local/bin/ 下有写的权限的。

pip 命令识别

Python 版本的不同导致 Python 下的包管理工具 pip 命令也不同,因此使得 pip 命令也产生很多的 pipX 命令。通常而言,对于 Python2x 版本其对应的 pip 命令为 pip, 而对于 Python3.X 版本其对应的 pip 命令为pip3. 此外,还有一种可同时执行不同版本 Pythonpip 方式:python -m pip install xxx 或者 python3 -m pip install xxx, 这就不需要用不同的命令了,但是前提还是需要摸清自己本机的环境。

Python2.X 版本的 pip

通过 which pip 查看 pip 路径,然后用 ll 查看文件属性,该文件为非链接文件,其与上面的 Python 相对应

我们也可以通过命令来查看 pip 目录中有哪些 pip:

1
ll /usr/local/bin | grep pip

结果:

我们看到上图有好多 pip 命令,到底哪些可用或者一致呢?我们可以看这些命令的 创建时间 基本可以判断前三个 pip 是同一时刻安装的,最后一个是另外时间安装的 pip 工具,我们可以通过 pip 命令安装一个已经存在的模块查看其已经安装的模块路径如下图,我们可以知道 pip, pip2, pip2.7 都是 Python2.X 版本的 python 命令所对应的 pip.

Python3.X 版本的 pip3

通过 which pip3查看 pip 路径,然后用 ll 查看文件属性如下图,然而,pip3 并没有此命令,但我们从之前的查看命令可知存在 pip3.5 命令

1
ll /usr/local/bin | grep pip

再次执行 which pip3.5,情况如下:

我们天真地以为 pip3.5 命令就是我们 Python3.X 版本的 pip,我们执行安装命令试试 pip3.5 install numpy,结果如下:

执行报错,这错误网上有解决方法 这里, 但是我们这里不确定此 Python3.5 是否关联我们本机的 Python3,因为这有可能是自己以前安装了 Python3.5 又卸载后存留的。这里我们再试试另外一种可能,就是本机 Python3 的 pip 在另外地方,只不过它没有在环境变量中,我们可以如下测试 python3 -m pip --version, 我们也可以尝试安装一个包,如图,可以确定通过 Python3 内部的 pip 可以将模块安装在内部目录里。

至此可以确定,Python3 对应的 pip 在自己安装路径内部,而不通过环境变量直接定位,需要通过 python3 -m pip install xxxx 来安装模块。

pip模块安装路径确定

到这里我想大家已经知道如何确定 pip 模块的安装位置了,主要要首先确定 Python 各个版本对应的 pip,然后通过 pip 的重复安装即可确定模块安装位置。

注意:下面的安装位置仅仅是我自己系统上的环境位置,并非适用你自己的环境,需要自己确定自己的 Python 版本和 pip 版本

Python2.X版本的模块位置:

1
pip install numpy

Python3.X版本的模块位置:

1
python3 -m pip install numpy

总结

Python2.X:

执行路径: /usr/bin/python

pip 路径: /usr/local/bin/pip, /usr/local/bin/pip2, /usr/local/bin/pip2.7

模块位置:/usr/local/lib/python2.7/site-packages

Python3.X:

执行路径: /Library/Frameworks/Python.framework/Versions/3.5/bin/python3

pip 路径: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pip-9.0.1-py3.5.egg

模块位置: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages

Python 存在不统一路径查找的原因:

(1). 通过 pkg 安装包: Python 官网 https://www.python.org/downloads/, 下载后文件为 python-3.6.3-macosx10.6.pkg 形式的文件,这种文件可直接双击安装,其安装的位置通常在 /Library/Frameworks 下。

(2). 通过 homebrew 安装: Homebrew 官网 https://brew.sh/, 其安装方式为:

1
2
brew install python # 安装python2.X
brew install python3 # 安装python3.X

这种方式安装是先将包下载在 /usr/local/Cellar 目录下,然后自动在 /usr/local/bin/ 下新建一个执行链接到 /usr/local/Cellar.

如:我们安装一个wget 工具:brew install wget,然后我们可以查看wget的原路径:

对于安装用 brew 安装 Python3,其也会自动下载对应的 pip3 的,并且都会将其放置在 /usr/local/bin/目录下,以软链接的形式链接到 /usr/local/Cellar下的对应文件.

(3). 通过源码包: 这会自动放置在 /usr/local/bin 目录下,且不会用软链接。

参考

苟且一下