Кроссплатформенный способ указать интерпретатор Python при запуске с ExecV
Вопрос
В настоящее время я использую сценарии Python как на Linux, так и на Windows 7. Файл выполняется в стиле execv, с которым я имею в виду, что интерпретатор определяется в начале файла в команде.
В системе Windows спецификация интерпретатора:
#!C:\Python26\python.exe
Однако в Linux это должно быть
#!/usr/bin/python
Я хотел бы запустить этот скрипт в обеих системах, не изменяя эту линию снова и снова.
Я попробовал следующее:
#!C:\Python26\python.exe
#!/usr/bin/python
так же как:
#!C:\Python26\python.exe;/usr/bin/python
Итак: есть ли способ указать несколько переводчиков?
Решение
#!/usr/bin/env python
Это позвонит env
Программа для поиска вашего пути для исполняемого файла Python.
Если вам нужно обеспечить конкретную версию Python, вы можете сделать, например:
#!/usr/bin/env python2.5
Другие советы
В зависимости от того, что вы пытаетесь сделать, это может быть немного тяжелым, но 0Install может запустить вашу программу, соответствующий интерпретатор Python для вашей платформы. В описании XML вашей программы сделайте что -то подобное (например, если вы хотите Python> = 2,6, <3):
<command name="run" path="myprog.py">
<runner interface="http://repo.roscidus.com/python/python">
<version not-before="2.6" before="3"/>
</runner>
</command>
Видеть: http://www.0install.net/local-feeds.html
Это также сделает 0Install загрузить подходящую версию Python, если у пользователя его еще нет.
Обратите внимание, что вы можете сделать это, даже если вы только нацелены на Linux, потому что с Python 3 нет единого #! Линия, которая работает на всех платформах (некоторые платформы, например, арка, требуют «python2», а не «python», в то время как другие, например, Debian, не предоставляют «Python2», только «Python»).