Мне нужен был python3.7 для проекта, и он не был доступен в виде пакета ubuntu, поэтому я загрузил среду python3.7 с помощью conda.Из этой «прародительской» среды я создал «родительскую» виртуальную среду python3 для конкретного проекта.
Из родительской среды в моем проекте я запускаю инструмент командной строки из google-cloud-sdkкоторый создает другую среду тестирования.Этот скрипт создает среду внука, вызывая что-то эквивалентное (parent) $ python3 -m venv /tmp/grandchild
.
В той среде внука по какой-то причине не установлен двоичный файл pip.И это проблема.Этот отсутствующий пункт приводит к тому, что скрипт Google не может установить зависимости dev-test.Однако у родителя и потомка установлен pip, но pip не передается.
Когда я убираю conda из картинки и полагаюсь только на python, который поставляется с моей системой пакетов ubuntu(в / usr / lib), я могу вкладывать свои виртуальные среды до тошноты, и кажется, что pip всегда наследуется должным образом.Я думаю, что это что-то особенное для сред Python / Pip Conda, на которых я спотыкаюсь.
Я думаю, что это отдельная причина проблемы: Пип отсутствует в Python venv (я неу меня нет этого файла ~ / .pydistutils.cfg где-нибудь на моем боксе)
ОБНОВЛЕНИЕ :
Я нашел способ надежно воспроизвести это, и безнужно для конды.Это происходит, когда родитель создается с помощью virtualenv, то есть virtualenv parent
, а ребенок создается из этого родителя с использованием -m venv
, то есть (parent) $ python3 -m venv child
.Затем дочерний элемент не копируется в него.
Среды вложенности, созданные с помощью virtualenv
, работают нормально, а среды вложенности, созданные с помощью venv
, тоже хорошо работают, но не тогда, когда venv используется в virtualenv-созданная среда.Они не смешиваются.
Примечание: среды на самом деле не «гнездятся» сами по себе, они являются независимыми копиями.Я имею в виду, что одно создано из другого.