Какой шебанг использовать для скрипта Python 3, который должен запускаться как в виртуальной среде, так и без нее? - PullRequest
1 голос
/ 10 октября 2019

У меня есть сценарий Python 3, который я разрабатываю на компьютере с Linux (Ubuntu), но он будет развернут на встроенном устройстве Linux.

На моей машине для разработки мои необходимые пакеты установлены в«виртуальная среда», но на встроенном устройстве пакеты устанавливаются глобально. На устройстве нет виртуальных сред, потому что оно предназначено для запуска только одного этого скрипта.

У меня проблемы с тем, что я должен поставить поверх моего скрипта.


Согласно ответу на этот вопрос , сценарий запуска скрипта в виртуальной среде должен быть следующим:

#!/usr/bin/env python

Но чтобы запустить скрипт с Python 3,shebang должен быть:

#!/usr/bin/python3

Проблема в том, что если я использую первый из этих shebangs, скрипт запускается на моей машине разработки, но не запускается при развертывании. На встроенном устройстве оно пытается работать с использованием Python 2 и завершается ошибкой. Когда я использую второй shebang, сценарий запускается на встроенном устройстве, но не на моей машине для разработки, поскольку он не использует Python 3 из виртуальной среды.

Есть ли такой shebang, который я могу использовать, который будетработать в обоих случаях: с виртуальной средой и без нее?

Да, я понимаю, что могу просто запустить свой скрипт как python3 my_script.py, и шебанг не будет иметь значения. Если мне не удастся заставить один шебанг работать в обоих случаях, думаю, это то, что я должен сделать.

1 Ответ

1 голос
/ 10 октября 2019

Ты рядом. Вы можете использовать python3, потому что в каталоге bin для virtualenv будет создана ссылка на python и python3.

Только это сделает это:

#!/usr/bin/env python3

...
...