Виртуальная среда Python Shebang для Windows и Linux

У меня есть файл Python, который я хотел бы выполнить, используя виртуальную среду (venv) в том же каталоге, что и файл. Я бы хотел, чтобы этот venv использовался независимо от того, активировал ли его пользователь или нет, чтобы избежать случайного запуска без надлежащей среды. Я бы хотел, чтобы это работало как на Linux, так и на Windows (через Git Bash).

Проблема в том, что venv помещает python в каталог bin в Linux, но в Scripts в Windows, и я не могу найти способ изменить это поведение при его создании. Я попытался создать его с помощью Git Bash в надежде, что он заставит python использовать каталог bin вместо скриптов, но это не сработало.

Следующий шебанг хорошо работает в Linux:

#!.venv3/bin/python

И этот хорошо работает в Windows:

#!.venv3/Scripts/python

Но что будет работать на обоих? Я знаю, что одним из вариантов было бы создание сценария оболочки, который активирует среду на основе обнаруженной ОС (используя $OSTYPE), но я хотел бы избежать этого, если это возможно, поскольку в противном случае это не необходимо.


person Scott B    schedule 22.08.2019    source источник
comment
Я не знаю Windows, поэтому не знаю, возможно ли это для Windows. Если обе стороны поддерживают символические ссылки, вы можете создать ссылку на каждый двоичный файл Python, который находится по общему пути в обеих системах. Если вы не можете использовать сим-ссылки, то скрипт, который можно разместить в общем месте, - это единственное другое решение, которое я могу придумать.   -  person CryptoFool    schedule 23.10.2020
comment
Привет. Вам это помогло? Я просто возвращаюсь и проверяю ответы, которые я опубликовал, чтобы узнать, могу ли я помочь больше или могу ли я понять, почему мой ответ не был принят или не проголосовал за мой ответ человеком, который задал вопрос.   -  person CryptoFool    schedule 27.10.2020


Ответы (1)


Вы можете использовать версию shebang для Windows:

#!.venv3/Scripts/python

а затем создайте символическую ссылку на стороне Linux:

.venv3/Scripts -> .venv3/bin

Я только что попробовал это с одним из моих виртуальных окружений. Это сработало для меня. Я не проверял случай Windows, но, конечно, это должно работать, поскольку мы используем правильный шебанг для Windows с самого начала.

person CryptoFool    schedule 23.10.2020