main.py モジュール (おそらく) で、使用するインタープリターを Python に伝えるにはどうすればよいですか? つまり、特定のスクリプトでバージョン 3 の Python を使用してプログラム全体を解釈したい場合、どうすればよいでしょうか?
おまけ: これは virtualenv にどのように影響しますか? プログラムの virtualenv を作成し、別のバージョンの Python を使用するように指示すると、競合が発生する可能性があると考えるのは正しいですか?
main.py モジュール (おそらく) で、使用するインタープリターを Python に伝えるにはどうすればよいですか? つまり、特定のスクリプトでバージョン 3 の Python を使用してプログラム全体を解釈したい場合、どうすればよいでしょうか?
おまけ: これは virtualenv にどのように影響しますか? プログラムの virtualenv を作成し、別のバージョンの Python を使用するように指示すると、競合が発生する可能性があると考えるのは正しいですか?
スクリプトの先頭にシバン行を追加できます。
#!/usr/bin/env python2.7
ただし、それは as として実行する場合にのみ機能し./my_program.pyます。
として実行すると、返されるpython my_program.pyPython バージョンが使用されます。which python
re: to virtualenv use:virtualenv -p /usr/bin/python3.2または、その Python 実行可能ファイルを使用するように設定するもの。
おそらくあなたが尋ねたものとは正確には異なりますが、これは私のプログラムの最初に置くと便利だと思います:
import sys
if sys.version_info[0] < 3:
raise Exception("Python 3 or a more recent version is required.")
最後にPythonのシリアル番号が付いたシバン (コードの最初の行)を使用し#!/usr/bin/pythonます;)
次に、Python ファイルをスクリプトとして実行します。たとえば、./main.pyコマンド ラインからではなく、python main.py.
Linux コマンドラインから Python を実行したい場合も同様です。
OP はnix プラットフォームで作業している可能性がありますが、この回答は非 nix プラットフォームに役立つ可能性があります。Microsoft Windows でのシバン アプローチの作業は経験していません。
言い換えると、シバン行は「スクリプト内」の質問に答えますが、Unix のようなプラットフォームに対してのみだと思います。スクリプトの外部にある Unix シェルですが、実際にシバン行を解釈して、呼び出す Python インタープリターのバージョンを決定します。確かではありませんが、このソリューションでは Microsoft Windows プラットフォーム ユーザーの問題は解決しないと思います。
Microsoft Windows の世界では、インストールされている Python の特定のバージョンごとに特別に環境変数を設定せずに、特定の Python バージョンを実行する方法を簡素化するには、python.exeの前に実行したいパスを次のように付けます。 C:\Python25\python.exe mymodule.pyまたはD:\Python27\python.exe mymodule.py
ただし、間違ったバージョンの Python ライブラリを指す PYTHONPATH およびその他の PYTHON... 環境変数を考慮する必要があります。
たとえば、次のように実行します: C:\Python2.5.2\python.exe mymodule
ただし、環境変数は次のように間違ったバージョンを指している可能性があります。
PYTHONPATH = D:\Python27
PYTHONLIB = D:\Python27\lib
恐ろしい楽しみがたくさん!
そのため、Windows では、virtualenv 以外の方法として、環境をセットアップし、python.exeの前にそれが存在するパスを付けて特定の Python 実行可能ファイルを呼び出すバッチ ファイルを使用することになります。この方法には、追加の詳細があります。ただし、管理します。アプリケーションの終了後もコンソールを固定したい場合は、「start」コマンドまたは「cmd.exe」コマンドのいずれかのコマンドライン引数を使用して「「コンソール」環境を保存して置き換える」などです。
あなたの質問から、いくつかの Python モジュールがあり、それぞれが特定のバージョンの Python を想定していると思われます。これは、subprocessモジュールを使用する起動モジュールを使用することで、スクリプトの「内」で解決できる場合があります。mymodule.pyを呼び出す代わりに、モジュールを呼び出すモジュールを呼び出します。おそらくlaunch_mymodule.py
import sys
import subprocess
if sys.argv[2] == '272':
env272 = {
'PYTHONPATH': 'blabla',
'PYTHONLIB': 'blabla', }
launch272 = subprocess.Popen('D:\\Python272\\python.exe mymodule.py', env=env272)
if sys.argv[1] == '252'
env252 = {
'PYTHONPATH': 'blabla',
'PYTHONLIB': 'blabla', }
launch252 = subprocess.Popen('C:\\Python252\\python.exe mymodule.py', env=env252)
私はこれをテストしていません。
pyenv を使用して仮想環境を制御している場合、これがスクリプトで機能することがわかりました。
#!/home/<user>/.pyenv/versions/<virt_name>/bin/python
DO_STUFF
シバン行の場合に使用するバージョンをシェルが決定するため、Python プログラム内でこれを行うことはできません。
シバン行でシェルを使用しておらず、入力python myprogram.pyするだけの場合、使用するバージョンを入力するときにどの Python バージョンを具体的に決定しない限り、デフォルト バージョンpythonXXX myprogram.pyが使用されます。
Python プログラムが実行されると、プログラムを実行するために使用する Python 実行可能ファイルが既に決定されています。
virtualenvPython のバージョンと環境を分離するためのものであり、特に競合を排除するために存在します。