在Ubuntu for Python3而不是Python2上安装libraires

时间:2015-10-10 18:36:55

标签: python python-2.7 python-3.x ubuntu

我的问题很简单。我想使用PyQuery安装pip。所以我在命令行中写下以下内容:

sudo pip install PyQuery

它说PyQuery已成功安装。然后,如果我在命令行中写:

python3 test.py

据说它无法识别import PyQuery。但是,如果我将python3替换为python,则不会显示此错误消息。

我认为问题是pip为Python2而不是Python3安装模块,但我不知道如何更改它。

  

Python2版本:2.7   Python3版本:3.4

1 个答案:

答案 0 :(得分:1)

TL; DR

每个安装的python版本都有自己的pip可执行版本(至少对于ubuntu而言),例如: python2已关联pip2python3 - pip3

pythonpip只是默认设置,可以简化为python2python3二进制文件。

所以你可以使用

pip3 install <package> 

在大多数情况下需要安装python 3的包。

让我们看看它是如何工作的

pip不是二元的!

通过执行以下命令来查看运行pip python包的命令:

$ less $(which pip)

输出将是这样的:

#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.4','console_scripts','pip'
__requires__ = 'pip==1.5.4'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
    )

实际上,linux中的大多数命令都不是二进制文件。其中很多只是有用的绑定,就像pip一样。

$ ls -lah $(which pip)
-rwxr-xr-x 1 root root 281 чер 17 00:52 /usr/bin/pip

您可以找到simple description of how executable scripts works on linux。它是为bash脚本编写的,但适用于任何解释语言:python,javascript,ruby等。

所以,如果pip不是二进制文件,那么这个脚本是什么?

RTFM about pip,简而言之,pip只是一个python模块,可以像任何其他python模块一样执行,查看PEP 0338,例如

$ python -m pip install <package>

与命令

具有相同的效果
$ pip install <package>

摘要

pip是运行带有传递参数的pip包的python脚本。在$ which pip文件中为python版本打包相对。如果你打开你的pip脚本,你会发现它与之相关的python版本。

就我而言:

$ head -1 $(which pip)
#!/usr/bin/python
$ /usr/bin/python -V
Python 2.7.6

或oneliner

$ $(expr substr `head -1 $(which pip)` 3 100) -V
Python 2.7.6