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. виртуальные среды.

источник

Как настроить вэнв

Другие вопросы по тегам