不能像使用 virtualenv 一样使用 venv 定义 python 包(版本)



我最近设置了Ubuntu 18.04.1桌面(带有Oracle VM(,它随Python 3.6.8一起提供。标准系统升级后,它变成了 3.6.9。后来我安装了Python 3.8,pip和venv,如下所示:

$ sudo apt install python3.8
$ sudo apt install python3-pip
$ sudo apt install python3-venv

如果我理解正确,pip 和 venv 是两个版本的 commn,事实上我已经意识到 pip3 安装了 3.6 版本文件。我没有强迫 apt 以某种方式安装 3.8 版 pip3。

现在我可以使用 Python 3.6 创建虚拟环境,但仍然不能使用 3.8。没有选项可以判断应该从哪个 Python 副本(版本(创建虚拟环境。在旧的virtualenvvirtualenvwrapper解决方案中,有一个命令行选项来定义版本:

mkvirtualenv -p python3.8 myvirtualenv38

mkvirtualenv -p python3.6 myvirtualenv36

我找不到与 venv类似的选项。有人说我们应该使用适当的 Python 版本运行venv作为

python3.8 -m venv myvirtualenv38

但这将失败并显示错误消息:

user@Server-Ubuntu:~/envs$ python3.8 -m venv env38a
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt-get install python3-venv
You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.
Failing command: ['/home/user/envs/env38a/bin/python3.8', '-Im', 'ensurepip', '--upgrade', '--default-pip']

为新的虚拟环境创建目录结构,但例如激活文件不存在。

附加信息:我也玩了一些更新替代方案 --config python3,但我停止了,因为 Ubuntu 18 似乎依赖于 Python3.6,并且将默认值更改为 3.8 会导致直接问题,例如在运行终端时。在上述过程中,我尚未尝试临时更改版本。

我终于找到了问题的答案......

必须为他想要使用虚拟环境的每个Python版本安装venv。所以正确的安装路径如下:

$ sudo apt install python3.8
$ sudo apt install python3-pip
$ sudo apt install python3.6-venv  # needed only if you would like to use 3.6 with venv
$ sudo apt install python3.8-venv

在为不同版本创建 virtualenvs 之后,如下所示:

mkvirtualenv -p python3.8 myvirtualenv38

mkvirtualenv -p python3.6 myvirtualenv36
# mkvirtualenv -p python3 myvirtualenv36  # this also installs v3.6 virtual environment

您需要安装正确版本的venv

sudo apt-get install python3.8-venv

安装后,只需运行:

python3.8 -m venv your_virtual_env

激活环境并确保它在 Python 3.8 上运行:

source your_virtual_env/bin/activate
python -V
>> Python 3.8.x

最新更新