【问题标题】:Using virtualenvwrapper and pyenv together一起使用 virtualenvwrapper 和 pyenv
【发布时间】:2020-08-23 19:18:04
【问题描述】:

$ pyenv virtualenv 3.8.0 tf12 创建一个位于~/.pyenv/versions/3.8.0/envs/tf12 的virtualenv,其中包含我们使用pip install 安装到其中的包。如果我们创建一个像mkdir myfolder && cd myfolder && pyenv local tf12 这样的新项目目录,该项目目录将使用 tf12 环境包含的相同内核和包,因为我们使用了pyenv local 命令。

但是我们也有使用mkproject mynewenv 创建的virtualenvs 和目录,它们位于~/.ve~/workspace 之类的地方。工作区是我们放置笔记本、代码和脚本.pynb.py.r 等的地方,相应的 virtualenv 使用在执行mkproject mynewenv 时处于活动状态的全局 python 版本。

这些使用mkproject mynewenv 创建的virtualenvs 与使用pyenv virtualenv 创建的virtualenvs 是分开的。

我得出的结论是,我们不能将它们一起用于进一步的可能性。它们是独立使用的。如果我错了,请纠正我。

【问题讨论】:

  • 我一直在阅读有关如何设置两者的教程,但没有人真正说你可以或不能,它总是有点暗示它应该是可能的。我同意你,感觉他们很不一样。即使尝试使用 pyenv-virtualenvwrapper 似乎也没有像我认为的那样工作。

标签: python virtualenv virtualenvwrapper


【解决方案1】:

请记住,pyenv-venv 和 virtualenvwrapper 只是 stdlib venv 包的包装器。他们只是拨打电话为您创建一个 venv:python -m venv venv_dir 并激活 venv source ./venv_dir/bin/activate。他们可能还会在您的 $PATH 上附加一些内容,以确保使用正确的 python 二进制文件。见pyenv shims

话虽如此,这两个工具创建的virtualenvs本质上是一样的(加上一些配置文件)。

理论上,将 virtualenv 目录从 $WORKON_HOME 复制到 .pyenv 并手动编写配置并没有错,但我不明白为什么有人要这样做。

如果想将由 virtualenvwrapper 创建的 venv 传输到 pyenv,那么您可以在 pyenv venv 中使用 pip freezepip install -r requirements.txt 导出已安装的软件包。

【讨论】:

  • “请记住,pyenv-venv 和 virtualenvwrapper 只是 stdlib venv 包的包装器。” - 那不是真的。 virtualenvwrapper 调用virtualenv,它不使用venv
【解决方案2】:

您应该安装pyenv-virtualenvwrapper plugin 并进行设置。之后你可以设置python版本,然后创建一个虚拟环境。

pyenv local 3.8.0
mkvirtualenv test-venv

如果需要,您可以创建一个 shell 函数将这两行压缩为一行。

如果您不想使用pyenv local 命令来避免创建.python-version 文件,您可以改用pyenv shell <python-version> 命令。

# .bash_profile or .zshrc after pyenv and virtualenvwrapper init.
mkvenv()
{
  pyenv shell $1
  mkvirtualenv $2 ${@:3} 
}

请记住,使用 mkvirtualenv test-venv -p python<version> 不会选择 pyenv 安装的 python 版本。

另一种方法: 如果你只是想用 mkvirtualenv 创建一个 venv,你可以使用一个 shell 函数来替换它的行为。

# .bash_profile or .zshrc after virtualenvwrapper init.
pyvenv()
{
  python$1 -m venv $WORKON_HOME/$2
  workon $2
}

要创建 virtualenv,请使用 pyvenv <python-version> <venv-name>。您可以将所有 virtualenvwrapper 命令与新创建的 venv 一起使用。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    相关资源
    最近更新 更多