无法使用venv定义python包(版本),与使用virtualenv的方式相同

时间:2019-12-03 06:53:18

标签: python virtualenv ubuntu-18.04 python-venv

我最近设置了Python 3.6.8随附的Ubuntu 18.04.1桌面(带有Oracle VM)。在标准系统升级后,它变为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都是这两个版本的通称,实际上我已经意识到pip3安装了3.6版本文件。我没有强行安装3.8版本的pip3。

现在,我可以使用Python 3.6创建虚拟环境,但仍然不能使用3.8创建虚拟环境。无法选择要从哪个Python复制(版本)创建虚拟环境。在旧的 virtualenv virtualenvwrapper 解决方案中,有一个命令行选项可以定义版本:

mkvirtualenv -p python3.8 myvirtualenv38

mkvirtualenv -p python3.6 myvirtualenv36

我找不到 venv 的类似选项。 Some says,我们应该使用相应的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']

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

其他信息:我也玩过 update-alternatives --config python3 ,但是由于Ubuntu 18似乎依赖于Python3.6而将默认值更改为3.8导致立即出现的问题,所以我停了下来例如在运行终端时。在上述过程中,我还没有尝试过临时更改版本。

2 个答案:

答案 0 :(得分:2)

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

必须为每个要使用虚拟环境的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

答案 1 :(得分:1)

您需要安装 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