首页 > 解决方案 > 在我的 CentOS7.2 中,我有 `python3` 命令,但为什么我不能使用 pyvenv?

问题描述

在我的 CentOS7.2 中,我有python3命令,但是为什么我不能使用 pyvenv?

[root@www myProject]# pyvenv --version
-bash: pyvenv: there is no command
[root@www myProject]# python3 --version
Python 3.5.2
[root@www myProject]# which python3
/usr/bin/python3

标签: pythonpyvenv

解决方案


pyvenv在 3.6 中已弃用,支持使用python3 -m venv.

您可能想知道这与您的 Python 3.5.2 有什么关系,因为 3.5 < 3.6。make install好吧,如果您从 python.org 或源代码运行 Python 3.5(甚至 3.6)安装程序,您将获得一个pyvenv命令(可能还有pyvenv3pyvenv3.5和/或pyvenv-3.5)。但你没有那样做;您使用了发行版的 Python 3.5。

发行版具有将 Python 等大型包分解为核心包和各种“可选”包(如python3-pippython3-curses. 不仅仅是红帽;1 Debian 和 Ubuntu 也分开venv成一个python3-venv包。他们如何决定什么是“核心”和什么是“可选”是一个复杂的过程,有很多遗留问题,所以我不知道确切的原因是什么,但我可以推测。

首先,大多数 linux 用户似乎更喜欢使用pipenv和/或virtualenv. 它们有更多的特性,它们不会被 Python 的冰期发布周期所困,你可以使用与 Python 3.4、3.6 甚至 2.7 相同的版本。在 2011 年,加入venvTOOWTDI 似乎是为了消除不兼容的竞争虚拟环境解决方案,但发生的事情是它们相互兼容而venv停滞不前。事实上,官方的 Python Packaging Authority 2建议virtualenv安装包pipenv开发应用程序PyPA 在 2017 年拒绝了改变它的建议

此外,正如 3.6 文档所解释的那样,pyvenv不推荐使用的原因基本上是因为它在发布多个 Python 版本的 Linux 发行版上造成了混乱。

最后:venv取决于pip. 哪个不是内置的。它是如何工作的?好吧,如果你得到一个 python.org 二进制安装程序,它将包括pip. 如果您从源代码构建它,Python (3.4+) 将ensurepip用于引导pipsetuptools. 但这主要是为了方便 Mac 和 Windows 用户,以及构建自定义 Python 版本的人;很少有 linux 发行版依赖ensurepip. 毕竟,您使用企业稳定发行版的原因是您想要所有经过测试的特定版本,您可以通过安装他们的python3-pip软件包来做到这一点,而不是通过弄出一个笨拙pip的人ensurepip然后再做pip install --upgrade pip一些他们没有的未来版本' t 测试。所以,除非发行版将它们合并pip到他们的python包,包含venv.


1. CentOS 7.2 当然只是复制 RHEL 7.2,因为那是 CentOS 的重点,所以问题是为什么 RHEL 7.2 做了venv一个可选包。

2. PyPA 有多官方?这并不完全清楚——它在 PSF 之下,并使用 python.org SIG,但它保持独立存在。但是如果你看一下所涉及的名字,他们基本上都是同一个人,他们既是 Python 核心开发人员,也是主要 linux 发行版的开发人员。因此,那些发行版关注 PyPA 也就不足为奇了——在这两个地方做出决定的人都是同一个人。


推荐阅读