【问题标题】:Virtualenv doesn't use right version of PythonVirtualenv 没有使用正确版本的 Python
【发布时间】:2018-10-20 06:10:32
【问题描述】:

我在亚马逊的 Cloud9 工作。

ec2-user:~/environment/flask_init $ python -V
Python 2.7.14
ec2-user:~/environment/flask_init $ virtualenv -p python3 venv
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/ec2-user/environment/flask_init/venv/bin/python3
Also creating executable in /home/ec2-user/environment/flask_init/venv/bin/python
Installing setuptools, pip, wheel...done.
ec2-user:~/environment/flask_init $ source venv/bin/activate
(venv) ec2-user:~/environment/flask_init $ python -V
Python 2.7.14

为什么虚拟环境不使用 Python 3?

请注意,此问题与this one 不重复。该问题与 Cloud 9 环境设置 Python 别名的方式有关。

【问题讨论】:

  • 您能否在创建 virtualenv 时尝试提供 python3 的完整路径,例如 virtualenv -p path/to/python3 venv
  • 使用链接/usr/bin/python3创建时仍然不起作用
  • @RubyNoob 您能否尝试使用 -v 标志再次创建 venv 并将日志粘贴到问题中?
  • 你的输出看起来一切正常,你可以尝试执行python3 -v,如果输出是Python 3.x,然后尝试运行python3 -m virtualenv venv
  • @Dluzak Stack Overflow 说我输入日志时编辑中的代码太多,所以我把它粘贴在这里:(pastebin.com/dSzuM73a)

标签: python virtualenv aws-cloud9


【解决方案1】:

我在我的机器上尝试了你的流程,一切正常。

dluzak@Karol-PC:/tmp$ python -V
Python 2.7.12
dluzak@Karol-PC:/tmp$ virtualenv -p python3 venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /tmp/venv/bin/python3
Also creating executable in /tmp/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
dluzak@Karol-PC:/tmp$ source venv/bin/activate
(venv) dluzak@Karol-PC:/tmp$ python -V
Python 3.5.2
(venv) dluzak@Karol-PC:/tmp$ 

尽管如此,在使用 python 3 创建 venv 时,我个人使用 virtualenv 作为模块:python3 -m virtualenv venv。也许这会起作用。

您提供的细节很少。您是否为 Python 2 和 3 安装了 virtualenv?你确定 Python 3 解释器可以正常工作吗?

编辑:

在 cmets 中调查后,我们发现问题出在 Amazon 配置的 bash 设置中。它接缝亚马逊配置 bash(可能在 ~/.bashrc 中)以用别名替换 python 调用。要解决此问题,需要在启用 venv 之前调用 unalias python。描述于Amazon docs

【讨论】:

  • 感谢您的建议。 Python 3 解释器运行并显示 v3.6.5。 python3 -m pip install virtualenv 给了我Requirement already satisfied: virtualenv in /usr/local/lib/python3.6/site-packages。我尝试了您的模块方法,但虚拟环境仍在运行 Python 2。
  • 虚拟环境几乎没有运行,因为当我在其中运行 python3 时,它会打开 python3 解释器。所以它好像有两个python,默认使用python3,就像没有运行虚拟环境的宿主环境一样。
  • @RubyNoob 我不太明白你的第二条评论。所以在激活 virtualenv 之后,当调用 python3 时,你得到的是 python3,也就是说:正是你想要的?如果不确定是主机还是虚拟环境,您可以致电which python3
  • Python3 绝对是虚拟环境的版本:~/environment/flask_init/venv/bin/python3 - 但我希望这个虚拟环境默认使用 python 3,而现在它默认使用 python 2.7。我根本不想在这个 venv 中使用 Python 2。
  • @RubyNoob venv/bin/python 应该是指向venv/bin/python3 的符号链接。你能检查一下是不是这样吗?最简单的方法是致电ls -alF ~/environment/flask_init/venv/bin
【解决方案2】:

当我今天早些时候使用 virtualenv 时,我遇到了同样的问题,即我的 env 没有使用正确版本的 python。

而不是像这样激活我的环境:

source activate

我发现像这样激活它确实有效:

source ./activate

希望对您有所帮助!

【讨论】:

    【解决方案3】:

    这是我在 Cloud9 上创建 virtualenv 的方法

    Python 3.4

    $ sudo pip install virtualenv
    $ virtualenv -p /usr/bin/python3.4 venv
    $ source venv/bin/activate
    

    Python 3.6

    $ sudo apt update
    $ sudo apt install python3.6-venv
    $ python3.6 -mvenv venv
    $ source venv/bin/activate
    

    【讨论】:

      【解决方案4】:

      我也遇到过类似的问题。 在我的情况下没有工作,因为我移动了虚拟 env 文件夹(但是当你重命名它时会发生同样的事情)。

      您可以通过键入来了解正在使用哪个版本的 python(以及将导入哪个模块)

      $ which python
      

      如果是这样写的:

      /usr/bin/python
      

      那么这意味着你的虚拟环境没有被激活。
      要解决这个问题,你可以简单地在你的环境中编辑脚本激活文件,而不是创建一个新的虚拟环境:

      $ nano venv/bin/activate
      

      并使用您的虚拟环境的绝对路径编辑以下行:

      VIRTUAL_ENV="/YOUR_ABSOLUT/PATH_TO/venv"
      

      希望对你有帮助 :)

      【讨论】:

        最近更新 更多