在我的CentOS7.2中,我有`python3`命令,但为什么我不能使用pyvenv?
In my CentOS7.2, I have the `python3` command, but why I can not use 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
pyvenv
在 3.6 中被弃用,支持使用 python3 -m venv
.
您可能想知道这与您的 Python 3.5.2 有什么关系,因为 3.5 < 3.6。好吧,如果你 运行 来自 python.org 的 Python 3.5——甚至 3.6——安装程序,或者来自源代码的 make install
,你将得到一个 pyvenv
命令(并且也可能 pyvenv3
、pyvenv3.5
、and/or pyvenv-3.5
)。但是你没有那样做;您使用发行版的 Python 3.5.
发行版有将 Python 等大型软件包分解为核心软件包和 python3-pip
或 python3-curses
等各种 "optional" 软件包的悠久传统。不只是 Red Hat;1 Debian 和 Ubuntu 也将 venv
分离到 python3-venv
包中。他们如何决定什么是 "core" 什么是 "optional" 是一个复杂的过程,有很多遗留问题,所以我不知道确切的原因是什么,但我可以推测。
首先,大多数 linux 用户似乎更喜欢使用 pipenv
and/or virtualenv
。它们具有更多功能,不会受制于 Python 的缓慢发布周期,并且您可以使用与 Python 3.4、3.6 甚至 2.7 相同的版本。 2011年,adding venv
seemed like TOOWTDI to eliminate the incompatible competing virtual environment solutions, but what's happened instead is that they've become compatible with each other while venv
has stagnated. In fact, the official Python Packaging Authority2 recommends virtualenv
for installing packages and pipenv
for developing applications, and the PyPA rejected a suggestion to change that in 2017.
此外,正如 3.6 文档所解释的那样,pyvenv
被弃用的原因基本上是因为它在 Linux 发行版中造成了混乱,这些发行版发布了 Python 的多个版本。
最后:venv
取决于 pip
。哪个不是内置的。它是如何工作的?好吧,如果您获得 python.org 二进制安装程序,它将包含 pip
。如果您从源代码构建它,Python (3.4+) 使用 ensurepip
到 bootstrap pip
和 setuptools
。但这主要是为了方便 Mac 和 Windows 用户,以及构建自定义版本 Python 的人;很少 linux 发行版依赖 ensurepip
。毕竟,您使用企业级稳定发行版的原因是您需要特定的、经过测试的所有版本,您可以通过安装他们的 python3-pip
软件包来实现,而不是通过从 ensurepip
然后做 pip install --upgrade pip
以获得他们尚未测试的一些未来版本。因此,除非发行版要将他们的 pip
合并到他们的 python
包中,否则包含 venv
.
没有多大意义
1。 CentOS 7.2当然只是复制了RHEL 7.2,因为这就是CentOS的意义所在,所以问题是为什么RHEL 7.2将venv
作为一个可选包。
2。 PyPA 到底有多官方?这并不完全清楚——它在 PSF 下,并使用 python.org SIG,但它保持单独的存在。但是,如果您查看所涉及的名称,就会发现主要 Python 核心开发人员和主要 linux 发行版的开发人员基本相同。因此,那些发行版关注 PyPA 也就不足为奇了——在这两个地方做决定的是同一个人。
我的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
pyvenv
在 3.6 中被弃用,支持使用 python3 -m venv
.
您可能想知道这与您的 Python 3.5.2 有什么关系,因为 3.5 < 3.6。好吧,如果你 运行 来自 python.org 的 Python 3.5——甚至 3.6——安装程序,或者来自源代码的 make install
,你将得到一个 pyvenv
命令(并且也可能 pyvenv3
、pyvenv3.5
、and/or pyvenv-3.5
)。但是你没有那样做;您使用发行版的 Python 3.5.
发行版有将 Python 等大型软件包分解为核心软件包和 python3-pip
或 python3-curses
等各种 "optional" 软件包的悠久传统。不只是 Red Hat;1 Debian 和 Ubuntu 也将 venv
分离到 python3-venv
包中。他们如何决定什么是 "core" 什么是 "optional" 是一个复杂的过程,有很多遗留问题,所以我不知道确切的原因是什么,但我可以推测。
首先,大多数 linux 用户似乎更喜欢使用 pipenv
and/or virtualenv
。它们具有更多功能,不会受制于 Python 的缓慢发布周期,并且您可以使用与 Python 3.4、3.6 甚至 2.7 相同的版本。 2011年,adding venv
seemed like TOOWTDI to eliminate the incompatible competing virtual environment solutions, but what's happened instead is that they've become compatible with each other while venv
has stagnated. In fact, the official Python Packaging Authority2 recommends virtualenv
for installing packages and pipenv
for developing applications, and the PyPA rejected a suggestion to change that in 2017.
此外,正如 3.6 文档所解释的那样,pyvenv
被弃用的原因基本上是因为它在 Linux 发行版中造成了混乱,这些发行版发布了 Python 的多个版本。
最后:venv
取决于 pip
。哪个不是内置的。它是如何工作的?好吧,如果您获得 python.org 二进制安装程序,它将包含 pip
。如果您从源代码构建它,Python (3.4+) 使用 ensurepip
到 bootstrap pip
和 setuptools
。但这主要是为了方便 Mac 和 Windows 用户,以及构建自定义版本 Python 的人;很少 linux 发行版依赖 ensurepip
。毕竟,您使用企业级稳定发行版的原因是您需要特定的、经过测试的所有版本,您可以通过安装他们的 python3-pip
软件包来实现,而不是通过从 ensurepip
然后做 pip install --upgrade pip
以获得他们尚未测试的一些未来版本。因此,除非发行版要将他们的 pip
合并到他们的 python
包中,否则包含 venv
.
1。 CentOS 7.2当然只是复制了RHEL 7.2,因为这就是CentOS的意义所在,所以问题是为什么RHEL 7.2将venv
作为一个可选包。
2。 PyPA 到底有多官方?这并不完全清楚——它在 PSF 下,并使用 python.org SIG,但它保持单独的存在。但是,如果您查看所涉及的名称,就会发现主要 Python 核心开发人员和主要 linux 发行版的开发人员基本相同。因此,那些发行版关注 PyPA 也就不足为奇了——在这两个地方做决定的是同一个人。