1. ホーム
  2. python

[解決済み] Pythonのデフォルトのバージョンを変更するには?

2022-03-14 01:12:20

質問

MacにPython3.2をインストールしました。私は実行した後 /アプリケーション/Python 3.2/Update Shell Profile.コマンド を入力すると、混乱します。 Python -V と表示されます。 Python 2.6.1 .

Pythonのデフォルトのバージョンを変更するにはどうすればよいですか?

解決方法を教えてください。

[2021年に向けて更新】。]

(Mac、Linux、Windowsを問わず:)

最新バージョンの python を起動する方法に迷ったら、ほとんどのプラットフォームでは python3 は、あなたの python2 インストールはそのまま (上記の互換性の理由により) このため、python3 を起動するときは python3 コマンドを実行します。

歴史的に...

命名規則では、一般に、ほとんどのスクリプトはpython2またはpython3を明示的に呼び出すことになっています。これは 後方互換性の必要性 .

技術的にはpythonはマイナーバージョン間の後方互換性すら保証していないにも関わらず、Python3 本当に は後方互換性を破壊します。当時は、プログラムが' python は python2 (当時のメインバージョン) を想定していました。非常に古いシステムでは、プログラムやスクリプトが python =python2であり、これを変更すると、それらのプログラムやスクリプトが壊れてしまいます。

この回答が書かれた時点では、古いスクリプトの互換性を維持するために、OPはこれを変更すべきではありませんでした。

2021年頃...

python2->python3への移行から何年も経った現在、ほとんどのソフトウェアは明示的にpython2またはpython3を参照しています(少なくともLinuxでは)。例えば、彼らは #!/usr/bin/env python2 または #!/usr/bin/env python3 . これには 例えば (python-is-python3-package) のように。 は、ユーザーのデフォルトに設定できるように python コマンドを解放しましたが、実際にはオペレーティングシステムに依存します。

をディストリビューションがどのように扱うべきかの処方箋は python コマンドは、2011年に次のように書き上げられました。 PEP 394 -- Unix 系システムにおける "python" コマンド . 最終更新は2019年6月です。

基本的に、もしあなたがライブラリを書いているのであれば、あなたが使える最も具体的なバージョンの python を使うべきです。そうでない場合は、エンドユーザーとして、個人的な使用のために自由にこれをリネームしてください(ただし、OSやディストリビューションによってはそれが容易でないかもしれません)。

シェルのエイリアスです。

しかし、シェルでカスタムエイリアスを作ることもできます。その方法はシェルによって異なりますが、おそらく次のようにすることができます。 alias py=python3 そして、それをシェルの起動ファイルに記述します。これはローカルのコンピュータでしか機能しませんし、(常にコマンドを起動するのでなければ)ただ入力するのに比べれば、いくらか不必要です。

<ストライク 混乱したユーザーは、エイリアスや仮想環境などを作って python 実行する python3 これは、貧しいフォームです。 これは現在では許容範囲ですが、PEP 394では、ユーザーに 仮想環境 の代わりに

3.*のバージョン、2.*のバージョンが異なる。

この質問に来た人が、例えば 3.1 と 3.2 のように 2 つの python3 のバージョンを持っていて、あなたが何らかの方法で 2 つのバージョンの python をインストールしたと混乱した場合、これはおそらく手動または手動のインストールを行ったからでしょう。OS の標準的なパッケージ/プログラムのインストール/アンインストール/管理機能を使って、状況を把握することができますし、おそらく (マイナーバージョン間のわずかな後方互換性のない変更に驚くほど影響を受けるような開発作業をしていない限り) 古いバージョンを削除 (または make uninstall 手動でインストールした場合)。もし、2つのバージョンが必要な場合は $PATH または、ほとんどの Linux ディストリビューションを使用している場合、sudo というコマンドを使用します。 update-alternatives . 古いバージョンにアクセスする必要があるプログラムを実行する場合、呼び出し側の環境またはシェルから適切に呼び出されることを確認します(var PATH ということです。)

PATHについて少し

補足: PATH について少し詳しく説明しますと、プログラムを選択する通常の方法として PATH ( echo $PATH LinuxやMacの場合)環境変数を使用します。常にフルパスでプログラムを実行することができます。 /usr/bin/???? some args または cd /usr/bin では ./???? some args (空白を例えば上で述べた 'echo' プログラムで置き換える) が、そうでない場合は、タイプする ???? some args がないと意味がありません。 PATH env 変数は、暗黙のうちにファイルを検索して実行することができるディレクトリを宣言します (もし /usr/bin に含まれていない場合は PATH と表示されます。 ????: command not found ). 最初のディレクトリで最初にマッチしたコマンドが実行されます( which コマンドを実行すると、それがどのサブパスであるかがわかります)。通常、以下のようになります(例:Linux、Macでも同様)。 /usr/bin/python これは、最終版のどこかにある他のシンボリックリンクへのシンボリックリンクです、例えば。

% echo $PATH
/usr/sbin:/usr/local/bin:/usr/sbin:usr/local/bin:/usr/bin:/bin

% which python
/usr/bin/python
% which python2
/usr/bin/python2
% ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  4  2019 /usr/bin/python -> python2*
% ls -l /usr/bin/python2  
lrwxrwxrwx 1 root root 9 Mar  4  2019 /usr/bin/python2 -> python2.7*
% ls -l /usr/bin/python2.7
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*

% which python3         
/usr/bin/python3
% ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 26  2019 /usr/bin/python3 -> python3.7*
% ls -l /usr/bin/python3.7
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*

% ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7 Mar  4  2019 /usr/bin/python -> python2*
lrwxrwxrwx 1 root root       9 Mar  4  2019 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 Mar 26  2019 /usr/bin/python3 -> python3.7*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*
lrwxrwxrwx 1 root root      33 Apr  2  2019 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7m*
lrwxrwxrwx 1 root root      34 Apr  2  2019 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config*
lrwxrwxrwx 1 root root      16 Mar 26  2019 /usr/bin/python3-config -> python3.7-config*
lrwxrwxrwx 1 root root      10 Mar 26  2019 /usr/bin/python3m -> python3.7m*
lrwxrwxrwx 1 root root      17 Mar 26  2019 /usr/bin/python3m-config -> python3.7m-config*

sidenote2: (まれに、python プログラムがサブプログラムを subprocess モジュールで、どのプログラムを実行するかを指定するために、サブプロセスのパスを sys.path sysモジュールから、または PYTHONPATH 環境変数が設定されていたり、フルパスが指定されていたりしますが、子プロセスにパスが継承されるため、あまり問題にはならないでしょう)。