如何将pip命令覆盖到Python3.x而不是Python2.7?
我使用的是OSX,我为Python3.5和Python2.7都安装了pip。我知道我可以运行命令pip2
来使用Python2,当我使用命令pip3
时,Python3.x将被使用。 问题是默认的pip
被设置为Python2.7,我希望它是Python3.x。如何将pip命令覆盖到Python3.x而不是Python2.7?
我该如何改变这种情况?
编辑: 不,我没有运行虚拟环境。如果它是一个虚拟环境,我可以运行Python3.x并忘记所有关于Python2.7的内容,不幸的是,由于OSX需要使用Python2.7,所以我不能这么做。所以我为什么这么问。
感谢您的回答。然而,我不想改变运行python
的功能。相反,我想改变运行的路径pip
。目前pip -V
显示我pip 8.1.2 from /Library/Python/2.7/site-packages (python 2.7)
,但我在寻找pip 8.1.2 from /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages (python 3.5)
我相信必须有一种方法可以做到这一点。有任何想法吗?
我永远只是通过Python本身,这种方式运行:
python3 -m pip install some_module
或
python2 -m pip install some_module
的-m
调用__main__.py
模块指定的包。 Pip支持这一点。
感谢您的答案。我知道我可以那样做,但那不是我想要的。我希望'pip'默认导致Python3.x。 –
对于您的项目,您应该使用virtualenv。
你可以选择Python会是在virtualenv中的创建时,通过指定它的命令行:
virtualenv -p python3 env
# then
. env/bin/activate
python # ← will run python3
,当您运行python
或pip
而Python解释器将使用一个virtualenv是活跃的。
引擎盖下,激活的virtualenv会:
- 修改
PATH
环境env/bin
覆盖那些从你的系统设置,以便二进制文件。 - 修改您的
PYTHONHOME
环境设置,使Python模块从env/lib
加载。
所以python
,pip
和你pip
安装任何其他包将从virtualenv中运行,与您选择的Python版本,你在virtualenv中安装的程序包的版本。
除此之外,在不使用virtualenv的情况下运行python
只会运行系统的默认python,通常不会更改它,因为它会破坏很多系统脚本。
我从来没有使用'virtualenv'除了繁重的python-ing,这是我见过的Python使用中最引人注目的例子之一(尽管我没有真正去寻找任何) –
这是一个好主意其他原因也是如此。例如,它保证升级你的系统不会破坏你的项目(尽管你可能需要更新virtualenv)。 – spectras
啊,整齐。我会研究它 –
虽然PEP 394没有具体提及pip
,但它确实讨论了许多其他Python相关命令(包括python
本身)。简短的说法是,出于向后兼容的原因,未版本化的命令在大多数合理的系统上应该指向Python 2.x以用于不久的将来。
通常,这些别名是以符号链接的形式实现的,您可以将符号链接指向您想要的版本(例如以ln -f -s $(which pip3) $(which pip)
作为根目录)。但是,如果你有任何期望与Python 2交互的软件(这可能比你想象的要多,因为许多软件与Python交互),这可能不是一个好主意。
的更理智的选择是建立与Python 3.然后,一个Virtualenv的VIRTUALENV内,所有的Python相关的命令将把3.x中,而不是2.x的这不会破坏系统,不像上一段那样会破坏事情。
感谢您的答案@Kevin,您认为改变'pip'会破坏兼容性吗?我想把'python'的默认值留给Python2.7,我只想改变'pip'指向的版本,就这些了。 –
@lokil>你不应该在virtualenv之外安装带'pip'的包,它会破坏你的python安装。 – spectras
@spectras我会接受你的建议和做virtualen,但我的问题依然存在。如果我想改变'pip'指向的路径......我该怎么做? –
对不起alias pip='pip3'
您~/.bash_profile
?
在终端中,运行nano ~/.bash_profile
,然后在末尾添加一行,其内容为alias pip='pip3'
。这是安全的;它不会影响系统进程,只会影响你的终端。
...但任何你运行的bash脚本都有一个'pip',它仍然会运行'/ usr/bin/pip',因为别名不会在下标中展开。所以对此非常谨慎。 – spectras
没错。但是,如果OP在正常安装软件包时寻求便利,这就是要走的路。对于我的终端,我有'python = ipython3','python2 = ipython','vanilla-python = python3'和'vanilla-python2 = python',以及'pip = pip3',它使Python 3中的工作更快。 –
@LukeTaylor谢谢卢克,我不想诉诸于此,但现在必须要做,直到我想出如何改变实际路径。谢谢 –
既然你已经在评论中指定你想语法像pip install [package]
工作,这里是一个解决方案:
安装
setuptools
为Python3
:apt-get install python3-setuptools
现在
pip
为Python3
可以通过安装:python3 -m easy_install pip
现在您可以使用
你在运行的virtualenv:与Python的特定版本 由Python 3的安装包? (如果不是的话,你应该先做) – spectras
我计划在不久的将来运行一个virtualen,但希望首先得到这个工作。 –
virtualenv将覆盖你的'PATH',所以正确的python被调用。你应该从virtualenv开始,它正是为此目的而设计的。 – spectras