【问题标题】:Use python2.7 in venv where python3 is default python在 venv 中使用 python2.7,其中 python3 是默认 python
【发布时间】:2019-02-20 08:47:08
【问题描述】:

我的机器上有 python2.7、python3.7、python3.6。我仍然不确定如何管理和查看所有三个 python 版本的位置。

目前我只需键入带有版本名称的 python 即可打开该终端或运行脚本。

我通过在~/.bashrc 中使用别名来默认使用python3.6。

我已经使用 python3.6 安装了 virtualenv,所以每当我默认创建 venc 时,它都会使用 python3.6。

我尝试使用 python2.7 创建 venv -

virtualenv -p /usr/bin/python2.7 /Users/karim/Documents/venv2.7

但在这个 venv2.7 中,当我看到 python 版本时,它也会给出3.6。当我在终端中输入 python2.7 时,它会打开 python2.7。

我可以在虚拟环境中为 python2.7 做别名,但我怀疑这也可能在 venv 之外创建 python2.7 默认值。

  1. 如何使用python2.7默认创建虚拟环境?
  2. 您能否向我推荐任何解释如何管理多个 python 版本、从一个版本切换到另一个版本的文章,看看那里的位置

我确实检查了所有 SO 线程,但没有文章帮助我在默认为 python3.6 的系统中使用 python2.7 创建 venv。

【问题讨论】:

  • @saleem mentioned 从软件中心安装 python(我假设您使用的是 ubuntu)。如果 python 安装表单软件中心(python 2 和 python 3)你不需要更改路径,只需使用关键字来调用 python 3 和 python2。然后从下面的答案中使用任何方法来创建虚拟环境

标签: python python-3.x python-2.7 ubuntu virtualenv


【解决方案1】:

来自Install and run Python 3 at the same time than Python 2,您需要从软件中心安装(python 2 和 python 3)python,然后使用此处提供的解决方案创建虚拟环境

如果 python 2.7 在您的系统中并安装了它,并且您在 ~/.bashrc 中使用别名 python27 来运行 python 2.7

然后你可以创建一个虚拟环境

python27 -m virtualenv <path to venv>

【讨论】:

  • 如果我这样做 alias python27 in ~/.bashrc 那么它将使 python27 在我的机器上默认,对吗?我不希望 python27 在我的机器上成为默认值。我只想在venv中使用它
  • 不,它不会使其成为默认值,它只是运行python2.7的关键字。如果在 bashrc 中 python 与 python 3.7 相关联,那么使用 python 你将与 python 3.7 相关联(默认)
  • @JhonPatric 你也可以使用 anaconda 在不同的 python 环境中工作
【解决方案2】:

我通过在 ~/.bashrc 中使用别名来默认 python3.6

这就是你问题的根源。如果我理解正确,您已经为python 创建了别名,这会导致您的系统不会在您的PATH 中搜索您的python 版本,而是使用您的别名。使用 virtualenv 时此行为不会改变,因为激活它们会改变您的 PATH,但别名仍会阻止使用其他 python 版本。

要使 python 安装“默认”,您应该通过在前面添加所需的 python 版本来更改您的PATH,而不是创建别名。

你可以使用命令

which python3   #python version 3x
which python27  #python version 2.7
which python    # "default" python

检查你的python安装的位置,然后添加一行

export PATH="<Directory of desired python version>:$PATH"

将你想要的python版本设为默认。

【讨论】:

  • 感谢您显示别名问题。对更改 PATH 有任何帮助吗?
  • 目前当我打开我的bashrc 时,它是空的。当前的python是3.6(因为当我输入python时,它会打开python 3.6)。现在假设我想用 python 2.7 创建虚拟环境,你能告诉我应该遵循哪些步骤吗?
  • 我确实导出了,但是python2.7在venv中仍然默认不可用
  • export 与别名无关,正如答案已经解释的那样,别名完全绕过您的PATHunalias python 应该从当前会话中删除别名。
【解决方案3】:

您是否正确激活了虚拟环境?创建 virtualenv 后,您应该发出命令

source /Users/karim/Documents/venv2.7/bin/activate

更改您的环境,以便python 命令引用 virtualenv 中的解释器。请记住,virtualenv 与您当前的工作目录无关...

您使用的virtualenv 是否可能与错误的 Python 二进制文件相关联?我的系统上有很多 Python,包括 /usr/local/bin 中的 Python3.7 和 Python 2.7:

fathead:~ sholden$ ls -l /usr/local/bin/python*
lrwxr-xr-x  1 sholden  staff   38  6 Dec 12:26 /usr/local/bin/python@ -> ../Cellar/python@2/2.7.15_1/bin/python
lrwxr-xr-x  1 sholden  staff   38  6 Dec 12:34 /usr/local/bin/python-build@ -> ../Cellar/pyenv/1.2.8/bin/python-build
lrwxr-xr-x  1 sholden  staff   45  6 Dec 12:26 /usr/local/bin/python-config@ -> ../Cellar/python@2/2.7.15_1/bin/python-config
lrwxr-xr-x  1 sholden  staff   39  6 Dec 12:26 /usr/local/bin/python2@ -> ../Cellar/python@2/2.7.15_1/bin/python2
lrwxr-xr-x  1 sholden  staff   46  6 Dec 12:26 /usr/local/bin/python2-config@ -> ../Cellar/python@2/2.7.15_1/bin/python2-config
lrwxr-xr-x  1 sholden  staff   41  6 Dec 12:26 /usr/local/bin/python2.7@ -> ../Cellar/python@2/2.7.15_1/bin/python2.7
lrwxr-xr-x  1 sholden  staff   48  6 Dec 12:26 /usr/local/bin/python2.7-config@ -> ../Cellar/python@2/2.7.15_1/bin/python2.7-config
lrwxr-xr-x  1 sholden  staff   34  6 Dec 12:22 /usr/local/bin/python3@ -> ../Cellar/python/3.7.1/bin/python3
lrwxr-xr-x  1 sholden  staff   41  6 Dec 12:22 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.1/bin/python3-config
lrwxr-xr-x  1 sholden  staff   36  6 Dec 12:22 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.1/bin/python3.7
lrwxr-xr-x  1 sholden  staff   43  6 Dec 12:22 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.1/bin/python3.7-config
lrwxr-xr-x  1 sholden  staff   37  6 Dec 12:22 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.1/bin/python3.7m
lrwxr-xr-x  1 sholden  staff   44  6 Dec 12:22 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.1/bin/python3.7m-config
lrwxr-xr-x  1 sholden  staff   39  6 Dec 12:26 /usr/local/bin/pythonw@ -> ../Cellar/python@2/2.7.15_1/bin/pythonw
lrwxr-xr-x  1 sholden  staff   40  6 Dec 12:26 /usr/local/bin/pythonw2@ -> ../Cellar/python@2/2.7.15_1/bin/pythonw2
lrwxr-xr-x  1 sholden  staff   42  6 Dec 12:26 /usr/local/bin/pythonw2.7@ -> ../Cellar/python@2/2.7.15_1/bin/pythonw2.7
-rwxr-xr-x@ 1 sholden  staff  230 25 Sep  2017 /usr/local/bin/pythonz*

which(在 MacOS 上也是 type)告诉您与哪个可执行命令相关联。我确认我得到了正确的python3.7

fathead:~ sholden$ which python3.7
/usr/local/bin/python3.7

为了确保我使用正确的 Python virtualenv,我使用 Python 二进制文件来执行它:

fathead:~ sholden$ python3.7 -m virtualenv -p /usr/local/bin/python2.7 venv2.7
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in /Users/sholden/venv2.7/bin/python2.7
Also creating executable in /Users/sholden/venv2.7/bin/python
Installing setuptools, pip, wheel...
done.

您的 Python 3.7 可能没有安装 virtualenv。如果是这样,安装它

fathead:~ sholden$ python3.7 -m pip install virtualenv
Looking in indexes: https://pypi.org/simple, https://pypi.python.org/simple
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/7e/1b/6c00d57127608793e16e8b7f813e64d58a1938505c42fe190d1386ab41e1/virtualenv-16.4.0-py2.py3-none-any.whl (2.0MB)
    100% |████████████████████████████████| 2.0MB 3.4MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.4.0

创建 virtualenv 后,您应该能够按照说明激活它。

【讨论】:

  • 是的,我正是为了启动这个 venv。但是在虚拟环境中,python终端以python3.6打开
  • 我已对其进行了更新,以尝试提供更多线索,了解此处可能出现的问题。\
  • tried python3.7 -m virtualenv -p /usr/local/bin/python2.7 /Users/karim/Documents/ven2 成功完成但当我启动它时,它有 3.6
  • 你确定/usr/local/bin/python2.7 不是 3.6 的解释器吗?使用which 命令查看在您键入python 时运行的解释器。
  • 为什么是 3.6 而不是 3.7 - 这更奇怪!
【解决方案4】:

我在我添加的 cmets 和问题描述中进行了解释

alias python=python3.6

bashrc

并尝试创建python2.7虚拟环境,但它仍然在其中打开3.6。

没有人谈论bash_profile文件。

在查看pyenv 的其他文章中,我看到他们认为bash_profile 是别名。我突然检查了我的,然后

alias python=python3.6

在里面。这就是为什么它也在 python2.7 虚拟环境中采用 python3.6 的原因。

我注释掉了这个别名,然后它不会全局使用 python 3.6。

需要注意的重要一点是 - 您更改别名并想查看它的效果,打开新标签或终端并在那里进行测试。如果您在旧的运行虚拟环境中尝试,它可能只显示旧的 python 版本。

感谢大家的回答和时间。这有助于我学习新知识。

【讨论】:

    【解决方案5】:

    如果使用pycharm,可以在settings > project > cog symbol下新建一个虚拟环境,下拉菜单:add。

    您可以在此处指定哪个是您的基本 python 解释器,将其指向安装 python3 或 python2 的位置,pycharm 将为您完成工作。

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2014-12-03
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多