なぜPython 3はデフォルトのPythonバイナリではないのですか?


42

pythonターミナルウィンドウに入力します。Python 3.5ではなくPython 2.7を入手しました。ドキュメントによると、Python 3.5はプリロードされているはずです。


1
「python3 -m venv my-venv」を使用して仮想環境をセットアップした場合、任意の端末から「source ... / my-env / bin / activate」を呼び出してその仮想環境をアクティブにすると、python 3.5がその端末のデフォルト。「python -V」を呼び出すと、現在のデフォルトバージョンを確認できます。
クレイグヒックス

あなたの答えは役に立ちましたが、その理由を尋ねました。方法ではありません。そして、それは大きな議論です。ここに。現在のバージョンではなく、デフォルトで古いバージョンを使用する必要がある理由。
ギボンツ

1
あなたは私の「コメント」について正確に正しいです!それが、答えではなくコメントを書いた理由です。
クレイグヒックス

回答:


56

あなたが読んでいる「ドキュメント」も彼らの言うこともわかりませんが、/usr/bin/pythonこれはPythonのデフォルトバージョンへの単なるシンボリックリンクであり、この場合は2.7です。これはpython端末で入力するだけの結果です。これは、それを定義するPEP 394の結果です

  • 当分の間、すべてのディストリビューションはがとpython同じターゲットを参照することを保証する必要がありpython2ます。

type pythonそしてfile /usr/bin/pythonこのことを確認します。

慣例以外のこの配置の理由は、Xenialのソースパッケージpython-defaultsがバージョン2.7.11であるため、pythonシンボリックリンクがこのバージョンを指しているためです。

python 3を使用するには、明示的python3にコマンドラインに入力する必要があります。特定のバージョンが必要な場合に推奨されますpython2。これはpython 2でも入力できます。Ubuntuには、現在のすべてのバージョンにデフォルトでpython 2と3の両方のバージョンが含まれています。

すべてをpython 3に移行し、それをデフォルトとしてマークする計画があります。


これはおそらくzeitgeiigeist-python3に依存するrhythmbox-zeitgeistプラグインを破壊していますが、見つかりませんでした。
ルシッドアラム

2
これは、 OPが意味するドキュメントです。
-SaidbakR

10

Python 3.5 REPLを取得するか、互換性のあるスクリプトを実行するには、と入力しpython3ます。これは、すべてのレガシーpython 2.xとの互換性を維持するためです(これまでは常にリンクされていましたが、引き続きリンクされますpython)。

ダッシュは、ターミナルを開き、たとえばREPLを起動するために(で)ファイルをpythonセットアップした場合に見つけることができます。Python用のデフォルトのGUI REPL環境はありません。通常のインターフェイスでは、ユーザーはターミナルにアクセスします。.desktop~/.local/share/applications/

python 3.5がデフォルトであるという話は、すべてのシステムスクリプトをpython 2.xからpython 3.xに移植することです。python3がすべての場合にpython 2を置き換えるわけではありません。


だから、正しい質問は、python3を自分のパスに追加して自動的に実行する方法ですか?
ギボンツ

つまり、コンパイルされたプログラムのように実行するPythonスクリプトをどのように取得しますか?
アンドリューキーチ

了解、ありがとう。コマンドプロンプトでpython3と入力するだけです。
ギボンズ

2
AIUIが長期的に/ usr / bin / pythonをどうするかは未解決の問題です。python2スクリプトのベストプラクティスは、python2を明示的に使用することです。
ピーターグリーン

1
むしろ使用するより #!/usr/bin/python3(または#!/usr/bin/python2より良い(具体的には、単にPython用)を使用して、スクリプトの中で)#!/usr/bin/env python3あなたはそれがリモートで移植できるようにしたい場合。ほとんどの場合、これは単なるドキュメント$ python3 your_pyprogram.pyです。多くの場合、とにかく使用して呼び出されるからです。
マイケル

4

デフォルトのPythonがとして利用可能であると仮定しますpython。その仮定は間違っています。

Python 3が「プリロード」されてPython 2がまったく付属していないシステムでは、Pythonのみが存在し、存在python3しませんpython

Python 3用に記述されたコードでは、常にというインタープリターを探す必要がありますpython3。Python 2用に記述されたコードは、歴史的にを探しますpython

おそらく今から数十年後の時点が来るpythonかもしれません。Python2を参照し始めるかもしれないとき、ほとんど誰も覚えていませんpython3。これは純粋に便宜上のものであり、早めに行うことはできますが、すべきではありません!次の影響があるため、急ぐ必要はありません。

「現在の古い」システムには知識がないpython2だけpythonなので、Python 2コードを探し続けることは完全に理にかなっていpythonます。これが、python「Python 2コードが存在する限り」Python 2を参照する理由です。

Python 2用に記述された新しいコードは、それが理にかなっている場合、完全に探すことができますpythonpython2Python 3を認識し、適切にグルーミングされたシステム(このようなリンクを提供するはずです)でのみ実行することを意図している場合、を探すこともできます。

を使用してPython 2コードを使用python2する利点は、一度python参照するようpython3になったときに追加のタッチを必要としpythonないことです。(Pythonの2のコードは、仮想的なPythonの4後に死亡した場合それが叶うかもしれない、そのインタプリタに人気になりpython4- 。のいずれか、それが指すせるのでpython3またはpython4その両方混乱することでしょう。)


2

Python 2.x、3.xの両方のバージョンが利用可能です。python 2.xを指すようにpythonを呼び出すと、python 2.xがロードされます。

以下の画像が役立ちます。

ここに画像の説明を入力してください


1
同じコマンドをどのように入力すると、2つの異なる結果が得られますか?
ギボンツ

4
の2回目の呼び出しからの異なる出力python<tab>、オートコンプリーターの照会に使用することです。オートコンプリーターは、可能な置換を出力python*し、新しいプロンプトに戻ります。
アンドリューキーチ

@givonz、うーん、私はTABキー仲間を使用しました。出力されません。可能なバイナリパターンです。
rɑːdʒɑ

何に反対票?
rɑːdʒɑ

2
私はダウン投票しませんでしたが、2つの最初の出力が異なる理由とapt-cache、特にUbuntu初心者にとっての役割は何であるかを説明する必要があると思います 。
-AL

2

Python 3.xは16.04で動作するはずです-実際、間違いなく動作します。Ubuntu 14.04があり、Python 3.4.3があります。テストするpython3ために必要なことは、入力するだけで、実行しているバージョンがわかります。


2
まあ、私はOSのコンピュータサイエンスを使用して呼び出しません。厳密に言うと、UbuntuはLinuxベースのOSであり、Unixベースではありません。
magu_

いくつかのコマンドプロンプトのほかに、LinuxとUNIXの違いを理解したことがありますが、コマンドが異なります。ただし、guiはsolarisで表示されるものよりもはるかに高度です。
ギボンズ

1
-1これは、理由の問題に対処しません。
デビッドフォースター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.