🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

5回答

5908閲覧

Pythonシェルとターミナルで調べるとpythonのバージョンが異なるのはなぜでしょうか。

upacara

総合スコア3

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2021/01/25 14:40

Macを使っています。
pythonの初心者です。

terminalで
python -V
と打つと
Python 3.8.5
がでてくるのですが、

同じくterminalで
idle
と打って Pythonシェルを起動すると
Python 2.7.16 (default, Jan 26 2020, 23:50:38)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.

WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.

Visit http://www.python.org/download/mac/tcltk/ for current information.

と出てきます。

atomをつかって
import sys
print(sys.version)
と打つと
2.7.16 (default, Jan 26 2020, 23:50:38)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
と出てきます。

pythonシェルで
import sys
print(sys.version)
と打つと、何もでてきません。
>>>

atom、pythonシェルで出てくるpythonのヴァージョンがterminalと異なります。
この現象をどう理解したらよいのかわかりません。

困っているわけではなく、なぜこうなるのか気持ちが悪かったので質問しました。
異なった結果がでてくる理由、そのままでもいいのかどうか、初心者でもわかりやすく教えていただけるとうれしいです。

どのヴァージョンが入っているのか正確に知りたい気持ちはあります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/01/25 15:38

Python2.7はOSに元から入っていたものではないでしょうか? Python 3.8.5はご自身でインストールされたものでしょうか? コマンドによって起動するPythonが異なるのはパスの設定によるものではないですか?
upacara

2021/01/27 04:09

Python 3.8.5は自分でインストールしました。 元から入っていたもの(Python2.7)とPython 3.8.5のどちらが起動されるか、コマンドによって異なるということでしょうか。 シンプルにするために、Python 2.7を消すことはできますか?消したら不具合が生じるでしょうか。
guest

回答5

0

ターミナルで、echo $PATHとすると:で区切られたディレクトリ名が幾つか表示されます。
これがコマンドの検索場所です。pythonとだけ打つと、先頭のディレクトリから順にそこにpythonが無いか探して、最初に見つかったものを実行します。どこにもなければcommand not foundですね。

これが、環境変数PATHの機能です。環境変数はプロセス毎の値なので、ターミナルのシェルプロセスが持っているPATHと、別のツールが持っているPATHとが異なると、pythonで実行されるコマンドも異なる可能性があります。

さらに、ターミナルのシェルから起動する場合は、aliasとか関数とかもあるので、複雑です。
type -a pythonで、alias、関数、PATHの検索結果など全部が表示されます。実際に実行されるのは1行目に表示された物です。
また、/から始まるフルパスでpythonファイルを指定すれば、設定と無関係にそのフルパスのPythonが動きますので、複数ある物の1つを確実に選択して起動できます。

あるいは、IDEツールなどでは、実行するPythonがどのPythonであるのか登録する設定箇所があるかも知れません。その場合は、PATHとは無関係にその登録したPythonが動くのでしょう。

同じくterminalでidle

Python3のidleがインストールされていないかも知れません。

・OS標準のコマンドは何というディレクトリにあるのか
・自分が追加で非標準のコマンドをインストールした場合は、どのディレクトリに入れたのか
・シェルの設定ファイルにどういう追加設定をしたのか
を把握しておく必要があります。

ひどい人になると、自分が何種類のPythonをインストールしたのかを覚えていません。

投稿2021/01/25 16:31

otn

総合スコア85882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

upacara

2021/01/27 07:18 編集

回答ありがとうございます。回答を頼りに調べるきっかけをもらっています。 Python3をインストールした状態でコマンドを試してみました。 ----- echo $PATHでディレクトリが10個でてきました。。。 一番上のディレクトリは/Library/Frameworks/Python.framework/Versions/3.9/binでした。 ターミナルを使ってpythonを実行すると(デフォルトで)python3.9が使われる理解してよいのでしょうか。 ターミナルでtype -a pythonを実行すると python is /Users/[username]/.pyenv/shims/python python is /opt/anaconda3/bin/python python is /usr/bin/python と3つのディレクトリがでてきます。 私はpythonを始めたばかりの初心者なので、 ターミナルのシェルプロセスが持っているPATH と 別のツールが持っているPATH が異なる場合がある、といった複雑な状況を理解する段階ではないのかなと思っています。 (それぞれのツールが別々のPATHを持っている(PATHを指定できる)、ということは学びました) ----- 以下のサイトを参考にしてatomで実行するpythonは3になるようにしました(実際に設定が変わったことを願っています)https://qiita.com/B4Li/items/496f402526715359569d コマンド import sys print(sys.version) 結果 3.9.1 です。 echo $PATH と type -a python で検索した結果が違うことまで「理解が及んでいない」状況だということを認識した上で、目下、python3が指定できたatomを使うことで今回の質問の問題解決としたいとおもいます。 感謝です。
otn

2021/01/27 09:06

> echo $PATH と type -a python で検索した結果が違うことまで /Library/Frameworks/Python.framework/Versions/3.9/bin/python という実行可能ファイルが存在しない場合に、そうなりますね。 > 先頭のディレクトリから順にそこにpythonが無いか探して、最初に見つかったものを実行します。 と、書いたとおりです。先頭ディレクトリに見つからないと次のディレクトリを探します。 /Library/Frameworks/Python.framework/Versions/3.9/bin/python が無くて、 /Library/Frameworks/Python.framework/Versions/3.9/bin/python3 があるのでは? 先ほど、同様の質問にコメントを追加したので、参考にしてください。 > 「python初心者がシンプルに(シンプルな環境で)pythonを学べる」ことを第一に考えた場合、どのような状況をつくるのがよいのか、 https://teratail.com/questions/318130
upacara

2021/01/29 06:07

リンク先の記事にお返事しました。返事をいただけてありがたいです。
guest

0

あなたのMacのPATH内にはidleが幾つ存在するでしょう?
$ type -a idle
idle is /Users/ユーザー名/.pyenv/shims/idle
idle is /usr/bin/idle

もしかして/usr/binのidleが実行されてしまっているのでは?
イメージ説明

まあ、今時idleを使う理由はあまり無いと思いますけど。

投稿2021/01/27 12:56

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

upacara

2021/01/29 05:04

回答ありがとうございます。 いくつもidleがインストールされているという状況だと理解できました。 pyenv, anaconda, virtualenvをアンインストールしてやり直しています。 idleは使いませんが、idleのおかげでpythonが作られていった歴史を感じられました。 回答ありがとうございました^^
guest

0

ベストアンサー

Pythonの複数バージョン環境についてはすでに回答がついていますが、ちょっと豆知識。

python3

でpython3が実行する環境において、

python3 -m pip

と実行すると、python3コマンドの環境に対してpipのコマンドを実行できるので、特に複数バージョンのPythonをインストールしてある環境ではこのように実行した方がいい、という話はちょくちょく出てきますが、同様にidleも

python3 -m idlelib

と実行すると、python3コマンドの環境に対するIDLEが立ち上がるようです。(Windows/ubuntu20.10で確認)
ちなみに、python2の場合は、

python2 -m idlelib.idle

で立ち上がりました。

投稿2021/01/27 11:31

katsuko

総合スコア3536

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

upacara

2021/01/29 05:10

豆は豆でも主食になる豆をいただきました。ありがとうございます。 起動するpythonのバージョンを指定するコマンドがあるのですね。(pyenvの役割は一体何なのでしょうか・・・よくわかりません) 今現在、pyenv, anaconda, virtualenvをアンインストールしてひとつのpythonだけ残した状態です。 豆、大事に使います。 ありがとうございました^^
otn

2021/01/29 06:17

> (pyenvの役割は一体何なのでしょうか・・・よくわかりません) 複数プロジェクトを並行して開発しており、プロジェクトごとにバージョンが違う場合に使います。 「python2とpython3があるが、python3は3.9.1のみをつかい、別のバージョンのpython3はインストーされていない」ということなら、python2とpython3の使い分けだけで十分です。
katsuko

2021/01/29 11:18

otnさんが回答してくれましたが、一応自分からも。(とはいえ、自分はpyenvはあまり使った事がないのですが) Pythonに限った話でなく、「Aの環境では動くけど、別のBの環境では動かない」なんて話はよくあります。 ですので、pyenvのような「自分はAの環境だけど、仮想的な環境を作ってBの環境での動作確認をする」ために開発したりテストしたりするツールは必要なのです。 ただ、まだ何も知らないうちにこのようなツールを使うとトラブルが起きても対処ができませんし、勉強目的であればまずは複雑にせずにシンプルな環境で基礎を固めるのが一番だと思います。
upacara

2021/02/07 10:01

環境づくりからプログラミングの基礎のkを学べた気がします。 またエラーで困ったら質問させてもらいたいとおもいます。コメントありがとうございます^^
guest

0

OS バンドルの python
OS が利用するパッケージの python2
OS が利用するパッケージの python3
OS が利用するパッケージの python3.7
OS が利用するパッケージの python3.8
アプリにバンドルされている python (/opt/anaconda3/bin/python とかもそうかも)

などがあったりするので、もうこの世の中はそういうのだと思った方がよいのではと思います。

そしてどこに何がインストールされているかと、そのアプリ開発者が
想定しているバージョンは何かという問題もあります。

また、python3.7 までは動いたので #!/usr/bin/env python3 としていあが、
3.8 からは動かなくなった、というケースも考えられるでしょう。

個人的に整理したいということなら、pyenv というアプローチもあります。

投稿2021/01/27 05:34

68user

総合スコア2022

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

upacara

2021/01/27 06:47

次のサイトを参考にして、atomで実行する時にはpython3になるように設定できました。 https://qiita.com/B4Li/items/496f402526715359569d ヴァージョンを確認しました。 ターミナルでpython -Vと打つと Python 3.8.5とでます。 atomで import sys print(sys.version)と打つと 3.9.1 がでて来ます。 python2がでてこないので一件落着しました。(ターミナルでidleと打つと依然としてpython2がでてきますが、atomを使う、もしくはターミナルからIDLEを開かなければpython2で実行する環境がなくなるため、ターミナルでidleと打ち起動したpython2の環境は「無視」ができると理解しました。この理解で間違いはないでしょうか?) 「もうこの世の中はそういうのだ」と腹を割るしかないのであれば・・・ヴァージョンの違いで問題がでた時に対処しようとおもいます。 ありがとうございました。
68user

2021/01/27 13:04

はい、それでよいと思います。 Mac はよくわかってませんが、おそらくシステムバンドルの Python が Python2 であって、何かしらシステム管理のために Python2 を使っているかもしれません。よって削除するわけにもいかないと思うので、自分が Python2 を使わないようにするというのが現実的な方法かと思います。
upacara

2021/01/29 05:11

普段話す言語が地域によって文化によって異なることとよく似てるなと感じてます。 これから言語を学ぶものとして、心得ておきたいとおもいます。 回答ありがとうございました^^
guest

0

「アプリケーションフォルダ」の「Python 3.8」の中に「IDLE」があれば、それを実行してみてください
Python の Mac OS X へのインストール方法

Python 2.7はサポート終了したので、使わない方がいいですよ
Python 2系終了のタイムリミット迫る。早く「3系」に切り替えよう

文法もいろいろ違うので、コードを修正しないと動かないことが多いですし
Python 2.7.x と 3.x の決定的な違いを例とともに

投稿2021/01/26 01:52

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

upacara

2021/01/27 04:28

回答ありがとうございます。 「アプリケーションフォルダ」の「Python 3.8」の「IDLE」はPython 3.9.1になっていました。 プログラムを実行するときにpython 3.9.1とPython 2.7.16のどちらが使われるのか、確認することはできるのでしょうか? python2.7を消すのがよいのでしょうか。あるいは デフォルトをpython3にするだけで消さない方がよいのでしょうか。
jbpb0

2021/01/27 11:01

自分でPython 2.xを入れた心当たりが無いなら、2.7はOS同梱のものなので、消さないでください 使わずに放置すればいいです
upacara

2021/01/29 05:23

pyenv, anaconda の中に入っていたものを消しました。 OS同封のpythonには手をつけていないつもりですが・・・・ 基本のキがわかっていませんでした。同封のものを消さないように気をつけたいと思います^^ いろいろと教えてもらえてありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問