首页 > 解决方案 > Ubuntu 21.04、Virtualenv 及其 Python 配置

问题描述

编辑:


我正在使用virtualenv基于 Python 3.10 创建一个虚拟环境。虽然virtualenv完成没有错误并且似乎确实激活了,但它仍然无法选择自己的 Python ,除非手动设置了PYTHONPATH环境变量。

我不确定我所面临的情况是由于 Ubuntu 合并 Python 的方式,还是 virtualenv 设置环境以获取本地解释器的方式。这是我到目前为止收集的内容:

  1. 我的基本系统是 Ubuntu 21.04。它有自己的 Python 3 (Python3.9.5) 安装,除了python3-virtualenv使用apt.

  2. 在 Python 3.10 中,我安装了该python3.10-dev包并以通常的方式继续创建虚拟环境:

    1. > virtualenv -p python3.10 the_env/
    2. > source the_env/bin/activate
  3. 虽然到目前为止看起来还不错,但这个环境没有任何关于它自己的site-packages目录的信息。甚至不是virtualenv应该创建的包含pip. 在这个安装中,如果你尝试> pip --version你只是得到一个pip包不存在的错误(pip“可执行”位置被正确拾取,但因为解释器不知道它的任何内容,site-packages它无法正确启动 pip)。

长话短说,我创建了两个环境,一个基于 Python3.9(完美运行),一个基于 Python3.10(无法运行),并在每个环境中做了一个非常简单的测试:

PYTHONPATH 在此之后,我手动定义了一个,然后激活完全指向site-packages该特定环境的环境,并且一切都按预期工作。

怀疑这可能与我系统的 Python 为 3.9 的事实有关,这意味着该USER_SITE变量有效的,而在 Python3.10 的情况下,它不是(因为我没有用它,这个只是我正在创建的虚拟环境)。因此,我怀疑这可能会偏离site模块确定事物位置的方式

由于我不确定,我想问以下问题:

  1. 这是否与 Ubuntu 处理 Python 安装的方式有关,这可能只是在虚拟环境中产生了这个小问题?

  2. 问题可能virtualenv出在没有明确指定 aPYTHONPATH吗?

  3. 这种行为可能是site模块的极端情况吗?

标签: python-3.xubuntupipvirtualenv

解决方案


对我有用的是从源代码安装。将源码解包后,作为总结:

$ ./configure --enable-optimizations --with-ensurepip=install --prefix=/path/to/install/to/
$ make -j
$ make test
$ make install
$ /path/to/install/to/bin/python3.10 -m venv /path/to/test
$ source /path/to/test/bin/activate
$ pip list
Package    Version
---------- -------
pip        21.2.4
setuptools 58.1.0
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/path/to/test/bin/python3.10 -m pip install --upgrade pip' command.
$ python -m pip install --upgrade pip
[...]
$ pip list
Package    Version
---------- -------
pip        21.3.1
setuptools 58.1.0

编辑

如下所述,我相信上面的过程之所以能正常工作,是因为从源代码构建和安装 Python 时,安装是正确的,我怀疑 Ubuntu 21.04 中的 3.10 安装不是正确的。

我从我的主目录下的某个地方的源代码安装了我的 Python,为了不冒把事情搞砸的风险,我也没有永久修改 PATH。

但是,将路径设置为$PATH:/path/to/install/to/bin应该没问题,无论是永久的,还是仅在运行时mkvirtualenv

这样做,我的新安装甚至似乎与我系统的virtualenvwrapper.

我自己并不真的需要处于 Python 的前沿,但如果我这样做了,我肯定会通过使用上述过程使自己独立于 Ubuntu 的最新开发。

顺便说一句,如果我直接在从源代码构建的 Python 安装中进行更新,那么当我安装新的虚拟环境时pip,我将不再收到有关旧版本(见上文)的消息。pip

编辑 2

向 Ubuntu 报告的错误: https ://bugs.launchpad.net/ubuntu/+source/python3.10/+bug/1955742

编辑 3

此外,由于 Ubuntu 21.04 将在一个月左右结束生命,升级到 21.10 真的很有意义。我刚刚尝试过,似乎 Python 3.10 虚拟环境在该版本中工作得很好。


推荐阅读