python-3.x - Ubuntu 21.04、Virtualenv 及其 Python 配置

标签 python-3.x ubuntu pip virtualenv

编辑:

  • 除了下面概述的行为之外,基于 Python3.10 的环境似乎忽略了随 pip -e 安装的软件包。选项( 开发模式 )。
  • 具体来说,以开发模式安装的软件包未在pip freeze 中列出。 (它在基于 Python3.9 的虚拟环境中执行)和一个简单的 import <package_name>失败。如果软件包安装正常(即 而不是 在开发模式下)一切都按预期工作。

  • 我正在使用 virtualenv创建一个基于 Python 3.10 的虚拟环境。而virtualenv完成没有错误并且似乎激活了,它仍然无法选择自己的 Python 除非 PYTHONPATH环境变量已手动设置。
    我不确定我所面临的情况是由于 Ubuntu 合并 Python 的方式,还是 virtualenv 设置环境以获取本地解释器的方式。这是我到目前为止收集的内容:
  • 我的基本系统是 Ubuntu 21.04。它有自己的 Python 3 (Python3.9.5) 安装,除了安装 python3-virtualenv 外,我根本没有接触过。使用 apt 打包.
  • 使用 Python 3.10,我安装了 python3.10-dev打包并以通常的方式继续创建虚拟环境:
  • > virtualenv -p python3.10 the_env/
  • > source the_env/bin/activate

  • 虽然到目前为止看起来还可以,但这个环境没有 任意 自己的资料site-packages目录。甚至不是 virtualenv 的那个应该正在创建,其中包括 pip .在此安装中,如果您尝试 > pip --version你只是得到一个错误pip包不存在(pip “可执行”位置被正确拾取,但因为解释器不知道它的 site-packages 它无法正确启动 pip)。

  • 长话短说,我创建了两个环境,一个基于 Python3.9(完美运行),一个基于 Python3.10(无法运行),并在 中做了一个非常简单的测试。每个 环境:
  • > python -m site
  • 在 Python3.9 环境下,sys.path 包括一条通往这个特定环境的site-packages的路径
  • 在 Python3.10 环境下,sys.path 包括该特定路径,但仍包括您希望找到的典型路径(例如,指向解释器本身和顶级环境目录的路径,但 不是 指向 site-packages 位置的特定路径。


  • 在此之后,我定义了一个 PYTHONPATH手动,在激活精确指向 site-packages 的环境之前对于那个特定的环境,一切都按预期工作。
    我怀疑这可能与我系统的 Python 是 3.9 的事实有关,这意味着 USER_SITE变量 有效,而在 Python3.10 的情况下,它不是(因为我没有使用它,这只是我正在创建的虚拟环境)。所以,我怀疑这可能会偏离 site module determines where things are 的方式。 .
    由于我不确定,我想问以下问题:
  • 这是否与 Ubuntu 处理 Python 安装的方式有关,这可能只是在虚拟环境中产生了这个小问题?
  • 问题可能出在 virtualenv 上吗?没有明确指定 PYTHONPATH ?
  • 这种行为可能是 site 的极端情况吗?模块?
  • 最佳答案

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

    $ ./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 的最新开发。
    顺便说一句,如果我更新 pip直接在从源代码构建的 Python 安装中,我将不再收到有关旧的 pip 的消息(见上文)当我安装新的虚拟环境时。
    编辑 2
    向 Ubuntu 报告的错误:
    https://bugs.launchpad.net/ubuntu/+source/python3.10/+bug/1955742
    编辑 3
    此外,由于 Ubuntu 21.04 将在一个月左右结束生命,升级到 21.10 真的很有意义。我刚刚尝试过,似乎 Python 3.10 虚拟环境在该版本中工作得很好。

    关于python-3.x - Ubuntu 21.04、Virtualenv 及其 Python 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69810545/

    相关文章:

    encoding - 命令行参数作为字节而不是python3中的字符串

    python - 用电视节目将消息转发给 super 组

    java - 使 Oracle JDK 在 Ubuntu 或 GNU/Linux 操作系统中自动更新

    python - pip 安装的命名空间变成内置的

    通过在终端中键入 "pip uninstall package_name"删除 Python 包,仍然显示在 "pip list"的列表输出中

    python - 在 virtualenvwrapper 环境中安装 GDAL

    python - find_elements_by_css_selector 没有给我任何输出,如何处理?

    python - 绝对导入导致 ModuleNotFoundError

    ubuntu - 如何在 Ubuntu 中安装 libusb

    ruby-on-rails - sudo rvm,找不到命令。 rvmsudo 也不起作用。 (Ubuntu 13.10)