我的问题很简单。我想使用PyQuery
安装pip
。所以我在命令行中写下以下内容:
sudo pip install PyQuery
它说PyQuery
已成功安装。然后,如果我在命令行中写:
python3 test.py
据说它无法识别import PyQuery
。但是,如果我将python3
替换为python
,则不会显示此错误消息。
我认为问题是pip为Python2而不是Python3安装模块,但我不知道如何更改它。
Python2版本:2.7 Python3版本:3.4
答案 0 :(得分:1)
每个安装的python版本都有自己的pip可执行版本(至少对于ubuntu而言),例如: python2
已关联pip2
,python3
- pip3
。
python
和pip
只是默认设置,可以简化为python2
或python3
二进制文件。
所以你可以使用
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