Virtualenv устанавливает envs в локальный /bin вместо bin
Проблема:
Каталог моей виртуальной среды, созданной с помощью (которая используется под капотом), находится в подпапке
localвместо этого что приводит к поломке по всем направлениям (в основном
virtualenvwrapperа также
vscodeна данный момент). По сути, эти инструменты ожидают, что интерпретатор находится внутри, а не внутри.
<envname>/local/bin.
Информация:
Я уже провел некоторые исследования и нашел следующее:
- В Ubuntu 22.04 произошло изменение, которое теперь используется в модуле
sysconfigвместоposix_prefixкак схема по умолчанию, которая была объяснена здесь - В какой-то момент Virtualenv представила патч для Python 2, который изменил
binместо дляlocal/binвнутри виртуальной среды в ответ на префикс, который был задан в этом вопросе и привел к этому патчу , который должен был исправить эту ошибку
Система:
- Убунту 22.04 ЛТС x86_64
- Python3 — 3.10.4-0ubuntu2
- python3-virtualenv — 20.13.0+ds-2
- виртуальная обертка ==4.8.4
Вопрос:
- Как я могу получить
virtualenvустановить мою среду в<envname>/binопять игнорposix_localвариант? - Является ли причина, по которой это было исправлено, все еще применимой для Python 3? (Должен признаться, я не совсем понял, почему этот патч вообще был необходим.)
3 ответа
Оригинальный ответ
Пользователь yingmanwumen на GitHub Virtualenv опубликовал решение :
По сути, они изменили схему sysconfig, экспортировав следующую переменную в выбранную ими оболочку:
export DEB_PYTHON_INSTALL_LAYOUT='deb'
Это изменяет схему установки по умолчанию с , которая вызывала проблемное поведение, на
deb_system, который снова имеет нормальный/ожидаемый макет виртуальной среды. Текущую схему установки можно проверить вот этим снипом:
import sysconfig
print(sysconfig.get_default_scheme())
Следует отметить, что это временное решение. Реальное решение, вероятно, включало бы изменение этого поведения само по себе. этой проблемыпроблема yingmanwumen, а также моя собственная проблема решают проблемы с
posix_localсхема. Разработчики готовы принять PR для решения основной проблемы. Я обновлю этот ответ, если будет предложен и принят PR, который его решит.
Обновлять
Специально для
virtualenv, что означает, что все версии
virtualenv > 20.16.5больше не должно быть этой проблемы.
Кроме того, кажется, что ошибка возникает, если:
[...] python3-distutils не установлен (или когда не используется форк )
согласно автору _ПР . Так что либо установка
python3-distutilsили использование версии форка deadsnakesdeadsnakes также должно решить эту проблему, если она возникает.
Наконец, предпринимаются усилия для решения этой проблемы также в Debian/Ubuntu и с созданием
posix_prefixсхема более надежная в целом. Это была не первая проблема, возникшая из-за запутанных схем установки, как видно из этого обсуждения .
«Решение», которое сработало для меня, состояло в том, чтобы понизить версию setuptools:pip install setuptools==59.6.0
У меня была та же проблема, что и у вас, и хотя у меня нет ответов на ваши вопросы, я обнаружил, что переход на venv решил мои проблемы в течение нескольких минут... Кажется, это современный, предпочтительный «один» способ управления python. виртуальные среды.