Кроссплатформенный способ указать интерпретатор Python при работе с execv - PullRequest
0 голосов
/ 21 октября 2010

В настоящее время я запускаю скрипты 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

Итак: есть ли способ указать несколько переводчиков

Ответы [ 2 ]

2 голосов
/ 13 июля 2013

В зависимости от того, что вы пытаетесь сделать, это может быть немного тяжелым, но 0install может запустить вашу программу, которая будет подходящим интерпретатором Python для вашей платформы.В описании XML вашей программы сделайте что-то вроде этого (например, если вы хотите Python> = 2.6, <3): </p>

<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 нет ни одного #!строка, которая работает на всех платформах (некоторые платформы, например Arch, требуют «python2», а не «python», в то время как другие, например Debian, не предоставляют «python2», только «python»).

1 голос
/ 21 октября 2010
#!/usr/bin/env python

Это вызовет программу env для поиска в вашем PATH исполняемого файла Python.

Если вам требуется конкретная версия Python, вы можете сделать, например:

#!/usr/bin/env python2.5
...