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.py
Python バージョンが使用されます。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 実行可能ファイルが既に決定されています。
virtualenv
Python のバージョンと環境を分離するためのものであり、特に競合を排除するために存在します。