execvで実行するときにPythonインタープリターを指定するクロスプラットフォームの方法
質問
現在、LinuxとWindows 7の両方でPythonスクリプトを実行しています。ファイルは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
他のヒント
あなたがやろうとしていることに応じて、これは少し重いかもしれませんが、0インストールはあなたのプログラムを実行すると、プラットフォームに適した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
これにより、ユーザーが既に持っていない場合、0インストールのPythonをダウンロードします。
Linuxのみをターゲットにしている場合でも、これを行うことができることに注意してください。Python3には単一の#がないためです。すべてのプラットフォームで動作する行(一部のプラットフォーム、たとえば、「Python」ではなく「python2」が必要ですが、その他のdebianは「python2」を提供しない、「python」のみを提供しません)。