「python」プログラムコマンドでPython 3を実行する方法は?


331

pythonプログラム命令は、Python 3を使用して実行することができるPythonの2を実行するpython3コマンド。pythonコマンドを使用してPython 3を実行するにはどうすればよいですか?


30
警告:2.7ではなくpython3を指すように/ usr / bin / pythonシンボリックリンクを変更しないでください。Ubuntuリポジトリで利用可能な多くのプログラムでは、/ usr / bin / pythonがpython 2.xと互換性がある必要があります。
-soulsource

1
ああ、今、アップグレードの意味を理解しました...実際、Ubuntu開発者はそれに取り組んでいます:wiki.ubuntu.com/Python/3 "デスクトップCDにPython 3のみを含めることがUbuntu 14.04 LTSのリリース目標です画像。」
soulsource

1
別の注意として、Python 3をデフォルトにすることを学ぼうとしているためここに来る人は、代わりに仮想環境(例:virtualenv)またはコンテナ(例:LXCまたはDocker)の調査に使用されるかもしれません。
ケビン

1
上部のsoulsourceの警告を参照して、共存するPython実行可能ファイルの命名規則を標準化し、Pythonプログラマーとパッケージメンテナーが依存する(そして必要とする)PEP 394を参照してください。
デビッドフォースター

2
@wjandreaは、仮想環境であっても、python意味として保持されるべきpython2です。私のコメントは、システムのPythonを回避しようとするのではなく、アプリケーション固有のPythonバージョンを使用する方法としてのものでした。
ケビン

回答:


370

簡単で安全な方法は、エイリアスを使用することです。これをファイル~/.bashrcまたは~/.bash_aliasesファイルに配置します。

alias python=python3

上記をファイルに追加したら、source ~/.bashrcまたはを実行しますsource ~/.bash_aliases

例えば:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

エイリアスを回避するには、command組み込みコマンドを使用します。

$ command python --version
Python 2.7.6

エイリアスを回避する別の方法は\、コマンドの前に使用することです。

$ \python --version 
Python 2.7.6

現在のシェルでエイリアスを無効にするには、unalias組み込みコマンドを使用します。

$ unalias python
$ python --version
Python 2.7.6

1
「アップグレード」オプションはありません。
ギリ

4
実際に私は2.7を一掃し、3.3に置き換えたいです。現時点では悪い考えのように思えます
。-ギリ

35
+1 3.3で動作するために2.7をパージする理由はありません。多くのソフトウェアはまだ2.7に依存しているため、そのまま長持ちします。
-don.joey

6
@begueradj エイリアスシンボリックリンクとはまったく異なります。
ラドゥラデアヌ14年

1
注意の言葉:これはPython 2.7を期待する他のスクリプトを壊すかもしれません。
kmiklas

85

[2016年6月]移行に関する情報の推奨場所は、Ubuntu Pythonの公式ページです。


Ubuntu wikiから:

UbuntuとDebianの両方について、Python 3をディ​​ストリビューションのデフォルトの優先Pythonバージョンにするというプロジェクトの目標進行中です。

これ意味しないもの:

  • /usr/bin/pythonPythonの3を指すようになりますいいえ、これは起こるだろうされていない(しない限り、PEP 394予見可能な将来のために疑わしいである、そうでない場合は提唱者)。/usr/bin/pythonそして、/usr/bin/python2Pythonの2.7を指すようになりますし、/usr/bin/python3サポートされている最新のPython 3バージョンを指します。

  • Python 2はアーカイブから削除されます。いいえ、これは起こりませんPEP 373がアップストリームバグ修正メンテナンスサポートを2020年まで約束していることを考えると、Python 2.7はUbuntuでかなり長い間サポートされ、利用可能なままであると予想されます。

他のパッケージの依存関係のため、シンボリックリンクを変更することはお勧めしませんが、「ディストリビューションでPython 3をデフォルトの優先Pythonバージョンにするという進行中のプロジェクト目標があります」。


以下のようなCLIの使用については、@RaduRădeanu、私は、ユーザーの中にエイリアスを置くことをお勧めします~/.bashrc.bash_aliases(を含む別のファイルを、ファイル~/.bash_profile、少なくとも一度ロードされ、組織的な目的のために、ほとんどですが、プラットフォームによって異なる場合があります)。Python 仮想環境もうまく機能します。

エイリアスの例:

alias python=python3

または

alias python='/usr/bin/python3'

スクリプトは#!/usr/bin/env python3相互互換性のようなものを引き続き使用する必要があります。

使用envは、仮想環境との混合使用に適しています。

注(@wjandreaに感謝):エイリアスはbashランタイムの一部であり、ユーザー環境の一部ではありません。したがって、シバン(#!)では使用できません。エイリアスpython = python3を好む場合、program.pyこのようなエイリアスインタープリターを呼び出すことにより、シェバンのない一部を実行できますpython program.py。エイリアシングは、3.4と3.6のようなpython3の複数のバージョンを一緒に使用するシステムにも役立つ場合があります。


1
これは現在時代遅れのようです。彼らはXenialでpython2を削除する予定でしたが、その後は削除しませんでした。
OrangeDog

1
@OrangeDog、更新ありがとう。はい、過去2年間にPython 3のみへの移行が進んでいるため、引用したwikiページは古くなっています。この進行に従う新しいページは、Ubuntu Pythonの公式ページです。
ケビン

Xenialの計画に関する「最新」のページも古くなっています。
OrangeDog

「最近更新されていない」ほど「古くなっている」とは言いません。これについての投稿を保管する現在の場所であるようです。ただし、ここでのコメントでは、他の誰でも見つけられるソースをいただければ幸いです。私の答えにソースを追加するだけでpython、なぜに変更しないのかについては、変換が完了するまで実際には関係ありません。それでも、それはただの非問題になるかもしれません。
ケビン

2
エイリアスはBashの内部にあり、環境の一部ではないため、まだpython3ではなく、シバンで使用する必要がありますpython
-wjandrea

28

更新:Python2とPython3は互換性がないため、これは間違った方法です。

コマンドラインツールを試すことができますupdate-alternatives

$ sudo update-alternatives --config python

「pythonの代替がない」というエラーが表示される場合は、次のコマンドを使用して自分で代替を設定します。

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

/usr/bin/python3それに応じて、目的のPythonバージョンへのパスを変更します。


19
python2とpython3は代替ではありません。この目的でupdate-alternativesを使用しないでください。
ジョブイン14年

なぜそうではないのですか?なぜupdate-alternativesPythonに適さないのかを説明してください。legacy.python.org/dev/peps/pep-0394原因ですか?
ドミトリーグリゴリエフ

11
代替は、同じ機能の異なる実装です。python2とpython3は同じ機能を提供しません。
イーリー

他のバージョンのpython3を手動で(ppaなどを介して)インストールした場合、このようなことができます。sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
デビッドバウカム

これは、Pythonに付属していない18.04.2のvmに必要なことです。ありがとう
ダークスター1

9

Ubuntu、およびその他のLinuxディストリビューションは、多くのアプリケーションとコマンドについて、依然としてPython 2.7に大きく依存しています。「python」のデフォルト参照をPython 3.xに変更すると、多くのPython関数がアサーションエラーをスローし始めます。

たとえば、Ubuntuでは、ファイルを直接編集してシェバンを「#!/ usr / bin / env python2.7」を参照するように変更しない限り、「pip」は正しく実行されません。Red Hat、Fedora、CentOSなどのRHEL(Red Hat Enterprise Linux)フレーバーでは、「Yum」コマンドもPython 2.7に依存しています。

ここでの私のポイントは、Python 3.xを参照するためにターミナルで「python」と入力できるように、大量のコードにアサーションエラーのスローを開始させることです。

ターミナルで 'python3'コマンドを使用し、Python 3.xファイルでshebang '#!/ usr / bin / env python3'を使用する方がはるかに優れています。


2

行う

cd ~
gedit .bash_aliases

その後、どちらかを書く

alias python=python3

または

alias python='/usr/bin/python3'

ファイルを保存し、ターミナルを閉じて、もう一度開きます。
リンク


1

あなたはシンボリックリンクすることができます/usr/bin/pythonpython3して

sudo ln -s /usr/bin/python3 /usr/bin/python

Python 2とpip2が依存関係としてインストールされるのを防ぐことができます

sudo apt-mark hold python python-pip

これをしたくない理由については、他の回答を参照してください。Ubuntu 18.04+にはPython 2が付属しなくなったため、それほど悪くないはずです。


2
「Ubuntuの18.04は、もはやPythonの2が付属していませんので、それはあまりにも悪いことではないはずです。」、Ubuntu(デフォルトでPython 2がインストールされていないバージョンでも)では、呼び出される実行可能ファイルpythonはPython 2であると想定されているため、いくつかの問題が発生する可能性があります。
-wjandrea

* python->/usr/bin/python
wjandrea

0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(/ usr / local / binへの書き込み権限がある場合)同様に

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

次に、選択したpythonに対してpyと入力するだけで(#!行でpyを使用します)


シンボリックリンクを使用する方が簡単ではないでしょうか?sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea

0

/ usr / bin / pythonと/ usr / bin / pipを単純に削除することは非常に役立ちます。これにより、すべてのプログラムが「python2」および「python3」コマンドに依存するようになります。

いくつかのオプションのパッケージや古いパッケージは動作に依存します#!/usr/bin/pythonが、奇妙な、時にはデバッグが難しい間違いを犯し続けるよりも、それらのプログラムにパッチを提出したいです。


-1

update-alternatives互換性の問題のために異なる時間に必要になる可能性のあるプログラムの異なるバージョンを提供するために使用できます。

この回答は、たとえばgcc / g ++の異なるバージョンを同時に維持するための設定方法の良い例です。

python2.7とpython 3.3で同じことをするだけです


2
初心者ユーザーは、リンクされた回答を異なる状況に簡単に適応させることができない場合があります。以前の回答を信用することに加えて、Pythonに必要な手順をレイアウトするとよいでしょう。
14:47にchaskes

ここに私は良い解決策を見つけましたlinuxconfig.org/…–
woto

Python 2および3は代替ではありません-異なるマイナーバージョンであっても(たとえば)ありません。このメソッドは簡単に物事を壊す可能性があります。
wjandrea

また、これはこの答えの
-wjandrea
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.