【问题标题】:How to override the pip command to Python3.x instead of Python2.7?如何将 pip 命令覆盖为 Python3.x 而不是 Python2.7?
【发布时间】:2016-12-20 15:54:13
【问题描述】:

我使用的是 OSX,并且我已经为 Python3.5 和 Python2.7 安装了 pip。我知道我可以运行命令pip2 来使用Python2,当我使用命令pip3 时,将使用Python3.x。 问题是pip的默认设置为Python2.7,我希望它是Python3.x。

我该如何改变呢?

编辑: 不,我还没有运行虚拟环境。如果它是一个虚拟环境,我可以只运行 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) 我确信必须有办法做到这一点。有什么想法吗?

【问题讨论】:

  • 您是否在 virtualenv 中运行? (如果没有,您可能应该先这样做)
  • 我计划在不久的将来运行一个 virtualen,但想先让它工作。
  • virtualenv 将覆盖您的PATH,因此调用正确的python。您应该从 virtualenv 开始,它正是为此目的而设计的。
  • 如果你不想使用虚拟环境,你可以重新组织你的 PATH..
  • @TadhgMcDonald-Jensen 我该怎么做?到目前为止,我唯一能想到的就是分配alias pip='pip3',但我认为必须有更好的方法。

标签: python python-3.x pip


【解决方案1】:

我总是通过 Python 本身运行它,这样:

python3 -m pip install some_module

python2 -m pip install some_module

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

【讨论】:

  • 感谢您的回答。我知道我可以做到,但这不是我想要的。我希望pip 默认通向 Python3.x。
【解决方案2】:

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

您可以通过在命令行中指定它来选择在创建时哪个 python 将是 virtualenv 的:

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

当您在 virtualenv 处于活动状态时运行 pythonpip 时,将使用该 python 解释器。

在后台,激活 virtualenv 将:

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

所以pythonpip 以及您使用pip 安装的任何其他软件包都将从 virtualenv 运行,使用您选择的 python 版本和您在 virtualenv 中安装的软件包版本。

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

【讨论】:

  • 我从来没有使用过virtualenv,除了沉重的python-ing,这是我见过的第一个令人信服的使用Python的案例之一(尽管我并没有真正去寻找任何案例)
  • 出于其他原因,这也是一个好主意。例如,它保证升级您的系统不会破坏您的项目(尽管您可能必须更新 virtualenv)。
  • 啊,整洁。我会调查的
  • 以及如何在python2.x的虚拟环境中使pip默认成为pip3命令?因为当您在文件中有子命令再次调用旧 pip 时,它无助于更改执行命令 - 您需要将其安装在该虚拟 venv 中。
【解决方案3】:

虽然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指向的版本,就这样。
  • @lok​​il> 你不应该在 virtualenv 之外安装带有pip 的包,它会破坏你的 python 安装。
  • @spectras 我会听取你的建议并做 virtualen,但我的问题仍然存在。如果我想更改pip 指向的路径...我该怎么做?
  • 正如凯文在这个答案中所说,您将删除 /usr/bin/pip 并使用他在答案中输入的命令将其重新创建为您想要的链接。在使用一段时间后,您可能会留下一个无法正常工作的 python。
【解决方案4】:

你不能在你的~/.bash_profilealias pip='pip3' 吗?

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

【讨论】:

  • ...但是您运行的任何包含pip 的bash 脚本仍将运行/usr/bin/pip,因为别名不会在下标中扩展。所以要非常谨慎。
  • 对。但是如果 OP 在正常安装软件包时是为了方便,那么这是要走的路。对于我的终端,我有 python=ipython3python2=ipythonvanilla-python=python3vanilla-python2=pythonpip=pip3,这使得在 Python 3 中工作更快。
  • @LukeTaylor 谢谢卢克,我不想诉诸于此,但现在必须这样做,直到我弄清楚如何更改实际路径。谢谢
【解决方案5】:

由于您已在 cmets 中指定您希望 pip install [package] 之类的语法正常工作,因此这是一个解决方案:

  1. Python3安装setuptoolsapt-get install python3-setuptools

  2. 现在pip for Python3 可以安装:python3 -m easy_install pip

  3. 现在您可以将pip与特定版本的Python一起使用 为 Python 3 安装包:pip-3.2 install [package]

【讨论】:

    【解决方案6】:

    运行这个:

    pip3 install --upgrade --force pip
    

    甚至更明确:

    python3 -m pip install --upgrade --force pip
    

    这将为 Python 3 安装 pip 并使 Python 3 版本的 pip 默认。

    验证:

    pip -V
    

    【讨论】:

    • 要验证,请使用python3 -m pip -V
    • 不起作用。完成上述步骤后,pip 仍然为我使用 Python 2.7
    • pip3 install --upgrade --force pip 工作,谢谢。
    【解决方案7】:

    它对我有用:

    作为超级用户

    卸载 pip

    sudo pip uninstall pip
    

    安装点子

    sudo python3 -m pip install --upgrade --force pip
    

    检查安装路径

    sudo pip -V
    

    作为本地用户

    卸载 pip

    pip uninstall pip
    

    安装点子

    python3 -m pip install --upgrade --force pip
    

    检查安装路径

    pip -V
    

    【讨论】:

    • /usr/local/bin/python:没有名为 pip.__main__ 的模块; 'pip' 是一个包,不能直接执行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2019-12-22
    • 2023-04-01
    • 2022-08-16
    • 1970-01-01
    • 2021-06-26
    • 2017-09-30
    相关资源
    最近更新 更多