Pyenv 选择 virtualenv 目录

Pyenv choose virtualenv directory

我刚开始使用 pyenv 来管理我的 python 版本,并开始使用 pyenv virtualenv 插件来管理我的 virtualenvs,到目前为止,我很喜欢它。然而,我想念的一件事是,使用 virtualenv,您实际上可以将虚拟环境放置在存储库目录中,以便您的存储库是一个完全可重现的环境。有谁知道在 pyenv 中选择 virtualenv 目录的方法吗?

简答:据我所知,你不能。

也不行吧?如果您使用 pyenv virtualenv 将 virtualenv 安装到存储库中,然后将该存储库克隆到另一台机器上……新机器上的 pyenv 如何知道控制存储库中的 virtualenv?

此外,“你可能不应该那样做”。 Virtualenvs 并没有 100% 与底层 Python 安装解耦,而且并不是真的那么便携。你真的想用一堆容易复制的垃圾来乱丢你的存储库吗?处理事情的“正确”方法可能是为 pip 维护一个 requirements.txt——这样你就可以在任何克隆你的 repo 的地方轻松地重现你的开发环境。

综上所述,没有什么能阻止你使用普通的旧 virtualenv 在你喜欢的任何地方创建一个 virtualenv,即使你安装了 virtualenv pyenv 控制下的 Python 口译员。该 virtualenv 本身当然 不会 pyenv 管理,但您仍然可以像往常一样使用它……

有一个解决方法

在您的项目目录中,创建一个 .python-version 文件。假设您已经使用 pyenv-virtualenv 安装了一些虚拟环境,然后将此行附加到它(您可能想要更改版本号):

3.7.1/envs/your-project-name@3.7.1

无论何时进入该目录,都会使用正确的 python 版本,而且运行良好。

项目跟踪器上有一个 GitHub 问题询问这个问题:https://github.com/pyenv/pyenv/issues/802

reply by a project collaborator was:

You can just create virtualenv in any location. To use it from pyenv, create symlink to the environment in ~/.pyenv/versions

尽管我必须说我是 not very satisfied with this solution

怎么样:

pyenv install -s 3.8.3 # install preferred version if needed
PYENV_VERSION=3.8.3 python -m venv /tmp/your/prefered/dir ; source /tmp/your/prefered/dir/activate

注意这个方法使用的是venv,不是virtualenv,两者略有不同,是标准库的一部分。