在 Ubuntu 上手动安装 python 3.10 创建 venv 失败

mat*_*ter 6 python-venv ubuntu-20.04 python-3.10

我已经使用 deadsnakes ppa 在 Ubuntu 20.04 上安装了 python 3.10。有用。然而尝试用它创建 venv 失败了:

$ python3.10 -m venv venv3.10

Error: Command '['<my-working-directory>/venv3.10/bin/python3.10', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
Run Code Online (Sandbox Code Playgroud)

这与python 3.11的类似问题非常相似,关于旧版本也有类似的问题。然而,安装 pip 并不是一个解决方案,因为如果只是为了能够在 PyCharm 中使用新的 venv(目前可以对缺少的 setuptools 进行故障转移),那么这将是一个问题。正如一些相关问题提到的那样,我已经升级到 pip 的最新版本。我也确实管理了重新安装 pip,就像对于3.10 版本一样,

$ curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
Run Code Online (Sandbox Code Playgroud)

我正在获取它的版本信息:

$ python3.10 -m pip --version
pip 23.1 from /home/matan/.local/lib/python3.10/site-packages/pip (python 3.10)
Run Code Online (Sandbox Code Playgroud)

但是尝试使用 python 3.10 创建新的 python 3.10 venv 最终会出现上面提到的错误消息。好像 venv 和/或 pip 没有完全集成,或者本地的某些东西指向 python 3.10 的旧工件。

kyr*_*lon 8

运行会sudo apt install python3.10-venv安装 python 3.10 的虚拟环境包,否则您在从 deadsnakes 安装 python 3.10 本身时无法获得该包。

为了验证这一点,我为我的 VirtualBox 下载了全新的 Ubuntu 20.04 LTS 副本,并使用了下面列出的过程:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.10 python3.10-venv
Run Code Online (Sandbox Code Playgroud)

之后可以为 python 3.10 创建虚拟环境:

kyrlon@pc23:~$ python3.10 -m venv py_venv
kyrlon@pc23:~$ source py_venv/bin/activate
(py_venv) kyrlon@pc23:~$
Run Code Online (Sandbox Code Playgroud)

如Deadsnakes PPA 主页的软件包部分所述

这些软件包遵循 debian 的模式,通常不包含完整的 python 发行版,仅包含apt install python#.#

使用该命令时,不包含apt install python3.10python 3.10 ( venv) 的 python 虚拟环境包以及其他有用的包devdistutilslib2to3gdbm和。tk正如 PPA 页面中提到的,apt install python#.##代表该实例中 python 的版本)不是一个全合一的 python 发行版,因为它们遵循debian 的打包模式/实践

6.1.3中规定。多个二进制包

单个源包通常会构建多个二进制包,要么提供同一软件的多种风格(例如,vim 源包),要么制作几个小包而不是大包(例如,这样用户只能安装子集)需要,从而节省一些磁盘空间,请参阅 lyx 源包)。

鉴于这样的背景,它被排除在外的原因就可以理解了。如上所述,由于用户可以选择安装特定的软件包,因此他们可以避免其用例不需要的软件包的膨胀。

希望这能让用户(包括我自己)明白,运行apt install python3不会安装venv其他有益的软件包,因为它包含来自 deadsnakes PPA 的分发,正如您从为 Windows 操作系统提供的二进制软件包中看到的那样。