问题:
bin
我使用 生成的虚拟环境的目录(在后台virtualenvwrapper
使用virtualenv
)位于子文件夹中local
,这导致全面损坏(目前大部分情况下如此)。基本上,这些工具需要 中的解释器,virtualenvwrapper
而不是 中的解释器。vscode
<envname>/bin
<envname>/local/bin
信息:
我已经做了一些研究并发现以下内容:
- Ubuntu 22.04 中有一个变化,现在使用
posix_local
模块sysconfig
而不是posix_prefix
默认方案,这已解释这里 - Virtualenv 在某些时候引入了针对 Python 2 的补丁,该补丁将
bin
位置更改为local/bin
虚拟环境内部以响应前缀posix_local
,这是在这个问题并导致此补丁本来应该修复这个错误
系统:
- Ubuntu 22.04 LTS x86_64
- python3-3.10.4-0ubuntu2
- python3-virtualenv-20.13.0+ds-2
- 虚拟环境包装器==4.8.4
问题:
- 我如何重新
virtualenv
安装我的环境<envname>/bin
,忽略posix_local
选项? - 修复此问题的原因是否仍然适用于 Python 3?(我必须承认,我一开始并不真正理解为什么需要这个补丁。)
答案1
原始答案
用户英曼舞门在 GitHub 上虚拟环境在中发布了解决方案这个问题:
基本上,他们通过在他们选择的 shell 中导出以下变量来改变 sysconfig 方案:
export DEB_PYTHON_INSTALL_LAYOUT='deb'
这会将默认安装方案从posix_local
(会产生问题的行为)更改为 (deb_system
再次具有正常/预期的虚拟环境布局)。可以使用以下代码片段检查当前安装方案:
import sysconfig
print(sysconfig.get_default_scheme())
需要注意的是,这只是一个临时解决方案。真正的解决方案可能包括改变这种行为本身virtualenv
。yingmanwumen 的问题也我自己的问题解决方案中的问题posix_local
。的开发人员virtualenv
愿意接受 PR 来解决潜在问题。如果提出并接受了可以解决问题的 PR,我将更新此答案。
更新
A公共关系已接受专门为 解决此问题virtualenv
,这意味着 的所有版本virtualenv > 20.16.5
都不再存在此问题。
此外,该漏洞似乎特别发生在以下情况:
[...]python3-distutils 没有安装(或者不使用死蛇叉)
根据提议者公关。因此,无论是安装python3-distutils
还是使用死蛇如果遇到此问题,fork 也应该修复。
最后,Debian/Ubuntu 也努力解决这个问题,使posix_prefix
方案总体上更加稳健。这并不是第一次因为安装方案混乱而出现的问题,这一点显而易见在这次讨论中。
答案2
答案3
对我有用的“解决方案”是降级 setuptools:pip install setuptools==59.6.0