同时装了Python3和Python2,怎么用pip?

同时装了Python3和Python2,怎么用pip?

一步步教你打造Python 和 Python3 并存的环境:

为了回答这个问题,特意跑到一台 CentOS 6.5 上装了一个 Python3(手头没有 Ubuntu 的环境),然后又装了一个 pip,通过ln创建连接、alias创建别名这些操作,证明Python2 和 Python3 还是可以完美并存的。

题主的问题不在于能不能并存,而在于用默认的 pip install 命令给Python3 安装这个做法本身就是错误的,下面是我的解决方案:

环境上之前已经有了 Python 和 pip,

安装了 Python3 (路径 /usr/local/python3/bin/python3)之后,创建一个软链接 /usr/bin/python3,

这样就可以直接使用 python3 命令了。

接着我用 Python3 装了个pip(路径 /usr/local/python3/bin/pip3)。之前有人说用pip3升级又会变成pip,所以我开始装的是一个1.5.4版本的。

那我现在就开始用两个pip进行安装啦,就安装那个 requests 包吧:

包不存在噢~

# pip install requests

Collecting requests

Downloading requests-2.9.1-py2.py3-none-any.whl (501kB)

100% |████████████████████████████████| 501kB 945kB/s

Installing collected packages: requests

Successfully installed requests-2.9.1

Python2 下是没问题的,接下来再看 Python3:

也是不存在的。

bingo~

好,我再升级一下 pip3:

完美升级,并且可用。

现在再说为什么题主使用 pip install 想给 Python3 安装这个做法是错的:

看我上面执行了两个 pip --version 命令和 pip3 --version 命令,明确的显示了他们安装包的 site-packages 路径,你默认的 pip 是 Python2 下的,安装的包当然安装不到 Python3 下面。我为什么要在 /usr/bin 下创建一个 pip3 链接,因为同一个目录下,只能存在一个 pip , 已经存在了指向 Python2 的 pip,新来的 pip 就不能再用这个名字,否则覆盖就造成原来 Python2 的 pip 不可用。

如何解决同名命令的多版本存在的问题呢? 参考我下面的做法:

python3/pip3 带个数字的命令总觉得不正统,但是不带数字的 python/pip 已经被 Python2 给占用了又想保留他们,那我该怎么办呢? 这个时候就轮到伟大的 alias 上场了:

此时 再用 pip install 安装的库都将安装到 Python3 的路径下,如果想用 Python2 的 pip , 只需要执行一个 unalias pip 就好了:

同理,可以把这个用到 python 命令上。

alias 命令可以写到你的shrc环境变量文件里,这样就不用每次都敲这么一长串命令了。

(看那个贴官方答案的,每次安装执行那么长一坨命令就不头疼么?)

另外,那篇[官解]里说脚本头部加上 shebang 行的,个人认为完全没有必要,为什么呢?

Linux 里面,脚本加上 shebang 并赋予可执行权限,这样通过 "/路径/脚本" 的形式就可以执行脚本了,如果脚本没有赋予可执行权限时,这种方式就无法执行。而用以下这种方式:

"python /路径/脚本" 或者 "python3 /路径/脚本" 无论有没有赋予脚本权限,无论有没有 shebang 行,脚本都是可以执行的,还是这种方式更直接一些。

PS: Linux 下面多认识一下 PATH,用好 ln 、alias ,可以帮你解决好多问题 ,有时 virtualenv 也并不需要。

☝ᖗ乛◡乛ᖘ☝ 完美