【问题标题】:python 2 instead of python 3 as the (temporary) default python?python 2而不是python 3作为(临时)默认python?
【发布时间】:2011-08-30 00:10:17
【问题描述】:

在我的电脑上

~$ python -V
 Python 3.2.1

但是当我运行一些 python 程序时我遇到了问题。我的猜测是(或者至少我想试试这个)存在一些向后兼容性问题,我想用

运行这些 python 脚本
 python2 2.7.2-2

它也安装在我的系统上,但我不知道如何将其设置为(临时)默认 python。 python脚本以

开头
 #!/usr/bin/env python

我正在使用 Arch linux。

【问题讨论】:

  • 你为什么不直接改变shebang?
  • 请记住,Arch Linux 是为数不多的将 python 变为 python3 的 Python 发行商之一。这在 Python 世界中一直是一个有争议的举动。请参阅有关 PEP 394 草案 (python.org/dev/peps/pep-0394) 的讨论。

标签: python


【解决方案1】:

您可以使用virtualenv

# Use this to create your temporary python "install"
# (Assuming that is the correct path to the python interpreter you want to use.)
virtualenv -p /usr/bin/python2.7 --distribute temp-python

# Type this command when you want to use your temporary python.
# While you are using your temporary python you will also have access to a temporary pip,
# which will keep all packages installed with it separate from your main python install.
# A shorter version of this command would be ". temp-python/bin/activate"
source temp-python/bin/activate

# When you no longer wish to use you temporary python type
deactivate

享受吧!

【讨论】:

  • 谢谢,好,简单的想法。有时,在一个大型构建系统中,有数百个 Python 脚本相互运行等等,而且它们都有 env python,因此更改每个文件不是一种选择。
  • 同上。许多开源软件包都假设 python 指的是 python2。这是在构建包时让 bash 或 zsh 将 python2 映射到 python 的简单方法。当前版本的 virtualenv 改变了提示,所以当你完成后会有一个很好的视觉提醒来运行 deactivate。
  • 就我而言,运行此脚本后仍然使用 python3。
  • 只是提醒像我这样的菜鸟,你总是需要在/usr/bin 才能运行上述任何命令,所以如果你想使用的话记得每次都做cd /usr/bin虚拟环境。
【解决方案2】:
mkdir ~/bin
PATH=~/bin:$PATH
ln -s /usr/bin/python2 ~/bin/python

停止使用 python2,exitrm ~/bin/python

【讨论】:

  • 简单明了!不需要 virtualenv。
【解决方案3】:

只需使用 python2.7 或 python2 之类的东西来调用脚本,而不仅仅是 python。

所以:

python2 myscript.py

代替:

python myscript.py

您也可以选择将当前链接到 python3 的 /usr/bin 中的符号链接“python”替换为所需的 python2/2.x 可执行文件的链接。然后你可以像使用 python 3 一样调用它。

【讨论】:

    【解决方案4】:

    你可以使用alias python="/usr/bin/python2.7":

    bash-3.2$ alias
    bash-3.2$ python
    Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> ^D
    bash-3.2$ alias python="/usr/bin/python3.3"
    bash-3.2$ python
    Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 16 2013, 23:39:35) 
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
    

    【讨论】:

    • 别名不被子shell继承,所以这只在直接调用python时有效。
    【解决方案5】:

    您不想要“临时默认 Python”

    您希望以 2.7 脚本开头

    /usr/bin/env python2.7
    

    并且您希望 3.2 脚本以

    开头
    /usr/bin/env python3.2
    

    “默认”Python 真的没有用。而“临时违约”的想法只是通往绝对混乱的道路。

    记住。

    显式优于隐式。

    【讨论】:

    • 从默认安装,不会是python27python32吗?
    • @Edwin:不在我的电脑上。这是/usr/bin/env python2.7
    • 问题并没有说 python 脚本是由用户创建的:它们可能是第三方脚本,在这种情况下,我们不想更改他们所有的 shebangs,尤其是如果它们处于某些版本控制之下当我们更新脚本时,我们的更改将被删除。在这种情况下,我们确实需要以某种方式临时将 python2 设置为 python。一个很好的例子是来自 google 的 nacl sdk,它在 archlinux 上引起了问题,因为它期望 python 是 python2。
    • 我宁愿用python2和python3
    【解决方案6】:

    如果你对 virtualenv 有一些问题,

    你可以使用它:

    sudo ln -sf python2 /usr/bin/python
    

    sudo ln -sf python3 /usr/bin/python
    

    【讨论】:

      【解决方案7】:

      使用 python 命令来启动脚本,而不是直接使用 shell。例如

        python2 /usr/bin/command
      

      AFAIK 这是解决带有错误 env 解释器行的脚本的推荐方法。

      【讨论】:

        【解决方案8】:

        作为 virtualenv 的替代方案,您可以使用anaconda

        在 Linux 上,使用 python 2.7 创建环境:

        conda create -n python2p7 python=2.7
        source activate python2p7
        

        要停用它,您可以:

        source deactivate
        

        可以在您的环境中安装其他软件包。

        【讨论】:

          猜你喜欢
          • 2023-03-26
          • 1970-01-01
          • 2018-01-15
          • 1970-01-01
          • 1970-01-01
          • 2017-12-18
          • 2017-10-03
          • 2019-10-04
          • 2021-02-21
          相关资源
          最近更新 更多