Как запустить сценарии из нескольких виртуальных сред без активации виртуальных сред перед вызовом? - PullRequest
0 голосов
/ 11 июня 2019

Я заставил иметь две несовместимые версии пакета python: более свежую версию с хорошим cli и более старую версию с python API, используемую сторонним инструментом оркестрации, который также является пакетом python с самим cli. Поэтому мне нужно иметь две отдельные виртуальные среды. Также я хочу запустить интерпретатор python из моей текущей одноразовой виртуальной среды (третья).

Все три команды (пакет cli, инструмент оркестрации cli и интерпретатор python) будут вызываться от пользователя и должны быть доступны по желанию без активации / изменения каталога работы или других наложенных магических заклинаний. Также я не хочу баловаться с содержимым сценария cli, поэтому пусть он будет доступен только для чтения / запуска для целей этого вопроса.

С моей точки зрения, есть несколько вариантов достижения желаемого поведения.

A . добавить в мою .bash_profile строку сценария

export PATH=venv_throwaway/bin:venv_cli/bin:venv_orchestration_tool/bin:$PATH

Это решение требует ручного шага для каждого инструмента, который я хочу использовать таким образом. Также это решение страдает от проблемы перекрытия пространства имен. Каталог bin для каждого нового клиента, который я хочу использовать таким образом, должен быть строго помещен после venv_throwaway/bin хотя бы потому, что в противном случае new_cli/bin/python будет предшествовать моему venv_throwaway/bin/python интерпретатору. Более того, если некоторые из других CLI имеют общие зависимости, которые несовместимы, то я должен грубо заставить корректную последовательность размещения путей, что является обременительным.

B . Исполняемый файл Symlink для /usr/local/bin для каждого инструмента, который я хочу использовать таким образом. Это решение почти идеально, за исключением того, что требует ручного шага.

B '. Вызовите cli с полным путем venv к исполняемому файлу (например, ~/.virtualenvs/awscli/bin/aws). Выглядит почти как опция B , особенно если я сделаю псевдонимы, чтобы сократить пути вен.

C . Сделайте мой собственный пакет Python my_awesome_cli_installer , который автоматизирует ручные шаги с B . Почти идеальный, за исключением того, что он страдает от NIH проблемы.

Есть ли другой способ добиться желаемого поведения? Какой вариант ( A , B или C ) мне следует использовать?

...