Активация virtualenv работает путем изменения PATH оболочки, поэтому каталог bin / virtualenv стоит первым. Это все . Это означает, что когда вы запускаете "python", он запускает копию virtualenv двоичного файла Python вместо вашего python глобальной системы.
Однако, если у вас установлен глобальный желток, единственным двоичным файлом «желток» в вашей переменной PATH является / usr / local / bin / yolk или что-то подобное; Активация virtualenv не меняет этого (потому что в вашем каталоге virtualenv bin / dir нет скрипта "желток"). И скрипт / usr / local / bin / yolk, естественно, содержит системный интерпретатор Python в строке shebang.
Вот почему установка желтка в virtualenv решает проблему; потому что он добавляет скрипт-желток в вашу папку virtualenv bin / dir с питоном virtualenv в строке shebang.
Если вы не хотите устанавливать yolk в каждом virtualenv, вы также можете просто скопировать скрипт-оболочку yolk из / usr / local / bin или где бы он ни находился в папку bin вашего virtualenv и вручную изменить строку shebang укажите на питона вашего virtualenv. Однако это не сработает с --no-site-packages virtualenv, поскольку оболочка сценария не сможет найти фактические пакеты желтка, которые необходимо импортировать! Если вы хотите использовать yolk внутри --no-site-packages virtualenv, на самом деле ваш единственный выбор - установить его там.