[解決済み] Pythonのデフォルトのバージョンを変更するには?
質問
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
環境変数が設定されていたり、フルパスが指定されていたりしますが、子プロセスにパスが継承されるため、あまり問題にはならないでしょう)。
関連
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】Macでポート3000をロックしているプロセスを検索(およびkill)する
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
-
[解決済み] Python 3をvirtualenvで使う
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】OS XでPythonのデフォルトバージョンを3.xに設定する方法は?[重複)。
-
[解決済み] Virtualenvに別のバージョンのPythonをインストールすることは可能ですか?