【发布时间】:2021-12-16 23:43:07
【问题描述】:
编辑:
- 除了下面列出的行为之外,基于 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) 安装,除了使用
apt安装python3-virtualenv包外,我根本没有接触过。 -
在 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位置的特定路径。
- 在 Python3.9 环境中,
在此之后,我手动定义了一个PYTHONPATH,然后为该特定环境激活了精确指向site-packages 的环境,并且一切都按预期工作。
我怀疑这可能与我的系统的 Python 是 3.9 的事实有关,这意味着 USER_SITE 变量 是有效,而在Python3.10,它不是(因为我没有用它,这只是我正在创建的一个虚拟环境)。所以,我怀疑这可能会偏离site module determines where things are 的方式。
由于我不确定,我想问以下问题:
-
这可能与 Ubuntu 处理 Python 安装的方式有关吗?可能只是在虚拟环境中产生了这个小问题?
-
问题可能出在没有明确指定
PYTHONPATH的virtualenv上吗? -
这种行为可能是
site模块的极端情况吗?
【问题讨论】:
标签: python-3.x ubuntu pip virtualenv