【问题标题】:Pyenv: `python3.6 -m venv venv` creates an environment with Python 3.7.4Pyenv: `python3.6 -m venv venv` 使用 Python 3.7.4 创建环境
【发布时间】:2019-12-06 17:56:33
【问题描述】:

我在使用 pyenv 创建虚拟环境时遇到了一些问题。

这很好用:

$ pyenv local 3.6.0
$ python
>>> Python 3.6.0 (default, Jul 21 2019, 14:03:29)
>>> [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4)] on darwin
>>> ...

但是当我创建一个虚拟环境(我假设使用 Python 3.6.0 完成)并激活它时,我得到了 Python 3.7.4。如果我使用python3.6 -m venv venv,也会发生同样的情况。

$ python -m venv venv
$ source venv/bin/activate
$ python
>>> Python 3.7.4 (default, Jul  9 2019, 18:13:23)
>>> [Clang 10.0.1 (clang-1001.0.46.4)] on darwin

一句话,我想创建一个与当前通过 pyenv 处于活动状态的版本相同的虚拟环境。我在这里错过了什么?

我的系统的一些信息:

  • 我在 macOS 上。
  • 我已经通过 Homebrew 安装了 Python 3.7.4,它是 python3 的默认版本。
  • 如果我只调用 python 而没有在我的 shell 中激活 pyenv,我会得到 Python 2.7.16 解释器。

【问题讨论】:

  • 我现在意识到系统时钟也搞砸了:P
  • 在裸终端(未激活 venv)中调用 python3.6 时您使用的是什么版本?
  • @Derlino 3.6.0。如果我在启动新的 shell 会话时没有加载 pyenv 初始化脚本,python3.6 会失败。
  • 检查项目仓库中的README.md。 pyenv 未在您的计算机上正确设置。

标签: python python-venv pyenv


【解决方案1】:

如果我只调用 python 而没有在我的 shell 中激活 pyenv,我会得到 Python 2.7.16 解释器。

这意味着来自pyenv 的垫片不会添加到PATH 环境中。

pyenv 需要在您的 shell conf 中使用以下代码进行初始化,

if command -v pyenv &>/dev/null; then
  eval "$(pyenv init -)"
fi

if command -v pyenv-virtualenv &>/dev/null; then
  "$(pyenv virtualenv-init -)"
fi

之后,重新启动你的 shell。 pyenv 将按预期工作。

查看项目仓库中的basic setup from pyenv 了解更多信息。

【讨论】:

    【解决方案2】:

    我写了here,你应该做的是:

    virtualenv -p /path/to/your/python/version/exectuable ENV
    

    【讨论】:

    • 我没有安装 virtualenv。用内置的venv模块也能做到吗?
    • 这没有回答问题,这就是为什么 venv 的行为不符合预期。
    • @DPinto - 是的,据我所知,您可以将它与 venv 模块一起使用。
    • @Derlin - 没有。问题是“我想创建一个与当前活动版本相同的虚拟环境”,意思是“如何”而不是“为什么”。但是对于“为什么”的问题 - 我认为 venv 从路径中获取可执行文件,这样你就可以覆盖它。
    猜你喜欢
    • 2018-07-18
    • 2019-12-12
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2019-11-29
    • 2017-10-20
    • 2020-10-31
    相关资源
    最近更新 更多