如何将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)我相信必须有一种方法可以做到这一点。有任何想法吗?

+1

你在运行的virtualenv:与Python的特定版本 由Python 3的安装包? (如果不是的话,你应该先做) – spectras

+0

我计划在不久的将来运行一个virtualen,但希望首先得到这个工作。 –

+0

virtualenv将覆盖你的'PATH',所以正确的python被调用。你应该从virtualenv开始,它正是为此目的而设计的。 – spectras

我永远只是通过Python本身,这种方式运行:

python3 -m pip install some_module 

python2 -m pip install some_module 

-m调用__main__.py模块指定的包。 Pip支持这一点。

+0

感谢您的答案。我知道我可以那样做,但那不是我想要的。我希望'pip'默认导致Python3.x。 –

对于您的项目,您应该使用virtualenv

你可以选择Python会是在virtualenv中的创建时,通过指定它的命令行:

virtualenv -p python3 env 
# then 
. env/bin/activate 
python    # ← will run python3 

,当您运行pythonpip而Python解释器将使用一个virtualenv是活跃的。

引擎盖下,激活的virtualenv会:

  • 修改PATH环境env/bin 覆盖那些从你的系统设置,以便二进制文件。
  • 修改您的PYTHONHOME 环境设置,使Python模块从env/lib加载。

所以pythonpip和你pip安装任何其他包将从virtualenv中运行,与您选择的Python版本,你在virtualenv中安装的程序包的版本。

除此之外,在不使用virtualenv的情况下运行python只会运行系统的默认python,通常不会更改它,因为它会破坏很多系统脚本。

+0

我从来没有使用'virtualenv'除了繁重的python-ing,这是我见过的Python使用中最引人注目的例子之一(尽管我没有真正去寻找任何) –

+0

这是一个好主意其他原因也是如此。例如,它保证升级你的系统不会破坏你的项目(尽管你可能需要更新virtualenv)。 – spectras

+0

啊,整齐。我会研究它 –

虽然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的这不会破坏系统,不像上一段那样会破坏事情。

+0

感谢您的答案@Kevin,您认为改变'pip'会破坏兼容性吗?我想把'python'的默认值留给Python2.7,我只想改变'pip'指向的版本,就这些了。 –

+0

@lokil>你不应该在virtualenv之外安装带'pip'的包,它会破坏你的python安装。 – spectras

+0

@spectras我会接受你的建议和做virtualen,但我的问题依然存在。如果我想改变'pip'指向的路径......我该怎么做? –

对不起alias pip='pip3'~/.bash_profile

在终端中,运行nano ~/.bash_profile,然后在末尾添加一行,其内容为alias pip='pip3'。这是安全的;它不会影响系统进程,只会影响你的终端。

+0

...但任何你运行的bash脚本都有一个'pip',它仍然会运行'/ usr/bin/pip',因为别名不会在下标中展开。所以对此非常谨慎。 – spectras

+0

没错。但是,如果OP在正常安装软件包时寻求便利,这就是要走的路。对于我的终端,我有'python = ipython3','python2 = ipython','vanilla-python = python3'和'vanilla-python2 = python',以及'pip = pip3',它使Python 3中的工作更快。 –

+1

@LukeTaylor谢谢卢克,我不想诉诸于此,但现在必须要做,直到我想出如何改变实际路径。谢谢 –

既然你已经在评论中指定你想语法像pip install [package]工作,这里是一个解决方案:

  1. 安装setuptoolsPython3apt-get install python3-setuptools

  2. 现在pipPython3可以通过安装:python3 -m easy_install pip

  3. 现在您可以使用