如何创建仅包含 python/pip 一个版本的 python 虚拟环境?

How can I create a python virtual environment that only includes one version of python/pip?

我的印象是,如果我创建一个具有特定 python 版本的 python 环境,它会只使用该版本,但看来我错了:

$ /usr/bin/python3 -m venv pyenv
$ ls pyenv
$ ls pyenv/bin
activate      activate.fish  easy_install      pip   pip3.8  python3
activate.csh  Activate.ps1   easy_install-3.8  pip3  python

为什么 python 的旧版本需要与我的 venv 中的当前版本并存?我可以指定不删除,还是应该手动删除 python2/pip?

在您的虚拟环境中,所有 python* 可执行文件都将指向同一版本。您可以从符号链接中看到这一点:

$ /usr/bin/python3 -m venv pyenv

$ cd pyenv/bin

$ ls -l python*
lrwxrwxrwx 1 [user] [group]  7 May 28 05:49 python -> python3
lrwxrwxrwx 1 [user] [group] 16 May 28 05:49 python3 -> /usr/bin/python3

同样,所有 pip 可执行文件都是同一文件的副本:

$ ls -l pip*
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip3
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip3.6

$ diff3 pip*
[no output]

这意味着,例如,一旦您拥有 运行 activate 脚本以便此 bin 目录位于您的 PATH 中,您将找到 python 在您的虚拟环境中,无论您键入 python 还是 python3.

例如,您使用 #!/usr/bin/env python#!/usr/bin/env python3 调用的 python 脚本也是如此。

仅当您显式调用不同版本的 python(例如 python2)或提供 python 可执行文件的完整路径(例如 /usr/bin/python)您是否可以在系统的其他地方找到另一个版本。