質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python

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

Q&A

解決済

3回答

5131閲覧

pyenvをアンインストールしたい

eggman

総合スコア21

Python

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

0グッド

0クリップ

投稿2022/02/01 14:26

編集2022/02/03 14:09

pythonの学習をしていたのですが、pyenvが思ったように動かなくなるアンインストールしようと思い、ターミナルでwhich pyenvとやったらよくわからないコードが出てきました。
ネットで調べてみてもよくわからないので、わかる方がいたら教えていただきたいです。

% which pyenv pyenv () { local command command="${1:-}" if [ "$#" -gt 0 ] then shift fi case "$command" in (rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;; (*) command pyenv "$command" "$@" ;; esac }

追記:
os : macOS
pyenvのインストール方法 homebrew
pythonのインストール方法:不明
シェル: zsh

% which pyenv /usr/local/bin/pyenv % pyenv root /Users/soumar/.pyenv %pyenv versions system * 3.10.0 (set by /Users/name/.python-version) 3.10.1 %which python /usr/bin/python

ここの* 3.10.0 (set by /Users/name/.python-version) のとこで.python-versionがひっかります。

これが表示されます。
まったく訳がわからず進めることができません。
よろしくお願いいたします。

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

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

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

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

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

hoshi-takanori

2022/02/02 22:37

やるべきことは次の 3 点ですね。 ・シェルの設定ファイルから pyenv の設定を取り除く ・pyenv で入れた python を消す ・pyenv そのものを削除 具体的な方法は、お使いの OS やシェルと、pyenv のインストール方法によるかと。
eggman

2022/02/03 14:01

かしこまるました。 言われた通りにやってみます。 不明な点が出た際にはまたお願いします!!
eggman

2022/02/03 14:13

1、zshを使っているのですが、zprofileやzshrcからpyenvのpathの設定を削除するでよろしいでしょうか?
quickquip

2022/02/03 15:25

表題を変えてもらえませんか。質問したいことが何なのか、ちょっと混乱しています。
quickquip

2022/02/03 15:42

あと、公式のインストール手順に従ってないと思いますので、質問がそのあたりに及ぶのであれば「やったこと」を全部書いた方が面倒がないかもしれません。
guest

回答3

0

一度eval "$(pyenv init -)"が実行されると(pyenvをインストールした時にこれが実行されるように設定したはずです)、pyenvという名前のシェル関数が定義されるのでwhich pyenvが関数の定義を表示するようになります。
いったん

shell

1disable -f pyenv

を実行してシェル関数を無効化してからwhich pyenvしてください。


それでpyenvコマンドがどこにあるかは分かります。分かりますが、どうやって消すかはpyenvどうやってインストールしたのかに依ります。

pyenvでインストールしたpythonがどこにあるかは、pyenvの環境設定をした時にどこに置くと設定したのか、もしくは特に指定しなかったのか、に依ります。

pyenvの環境設定をした時にどういう設定をしたのかは、シェルが何か、pyenvをどうインストールしたのか、pyenvのバージョンがいくつなのかに依ります。


要するに、インストールした方法と、環境設定をした方法に依るので(インストールした方法と環境設定をした方法が別なことに注意)、そこの情報を隠されるなら、もしくは覚えていないなら、具体的な手順は指定できません。ありとあらゆるパターンを想定した手順を書くのも面倒ですし、面倒さに見合う価値があるとも思えません。

使用しているOSとシェル、pyenvをインストールした方法と環境設定した方法を(全部じゃなくてもいいので)質問を編集して書いてもらえるといいかと思います。
もしくは、pyenvのバージョン(pyenv -Vの結果)と、which pyenvでわかるpyenvの場所と、pyenvが有効な状態でのwhich pythonの結果が分かればおおよその見当はつくと思います。(ただしpyenvがまともにインストールされていたならという前提で)


追記

pyenv root で、pyenvがどこをルートにしているか分かるんですね。(今気づきました)
そこを全部消して、シェルの設定からpyenv関連の記載を削除すれば十分ですね。


追記

https://github.com/pyenv/pyenv#user-content-choosing-the-python-version
を見てください。pyenvを使ったバージョン決定の優先度は

  1. PYENV_VERSION 環境変数
  2. カレントディレクトリの .python-version
  3. カレントディレクトリからディレクトリを上に遡っていって最初に見つかった .python-version
  4. $(pyenv root)/version

の順です。

あなたが過去に /Users/name で pyenv local 3.10.0 を1回でも実行したなら、そこに .python-version ができて3.10.0が書き込まれています。それだとホームディレクトリの配下全体で、3.10,0が指定されているように動きます。(個別にpyenv localを指定したディレクトリではそれが動きます)
(set by /Users/name/.python-version) と表示されているならそういう状態なのでしょう。

cd /Users/name pyenv local --unset

するといいかと。


追記

pyenv global xxx すると、上で書いた、pyenvを使ったバージョン決定の優先度の4番、$(pyenv root)/version に xxx を書き込みます。
pyenv local xxx すると、その時のカレントディレクトリに .python-version を作り xxx を書き込みます。
pyenv shell xxx すると、PYENV_VERSION 環境変数に xxx を書き込みます。
pyenv local --unsetpyenv shell --unsetは削除になります)

で、優先度が PYENV_VERSION 環境変数 > カレントディレクトリの .python-version > 上位ディレクリ > $(pyenv root)/version ですから、つまり、pyenv global で設定した値よりも pyenv local で設定した値が優先され、pyenv local で設定した値よりも pyenv shell で設定した値が優先されるという意味です。

逆に見ると、シェルの中で pyenv shell を実行してない時は pyenv local で指定された値を使おうとします。pyenv local が実行されたディレクトリでなければ pyenv global で指定された値を使います。

投稿2022/02/02 15:56

編集2022/02/03 15:24
quickquip

総合スコア11038

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

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

eggman

2022/02/03 05:30

コメントありがとうございます。 disable コマンドをしたらpyenvの場所がうまくいきました。 /usr/local/bin/pyenv にありました。 元々pythonのバージョンを変えたくて、pyenvを使っていたのですがpyenv versionsとやると、system * 3.10.0 (set by /Users/name/.python-version) 3.10.1 これが出てくるのですが、set by の後が/.python-versionのとこが気になります。 他の人はここがpyenvになっているのですが、、、 これだけの情報では原因解明は難しいでしょうか?
quickquip

2022/02/03 06:23 編集

https://github.com/pyenv/pyenv#user-content-choosing-the-python-version を見てください。指定の優先度は 1. PYENV_VERSION 環境変数 2. カレントディレクトリの .python-version 3. カレントディレクトリからディレクトリを上に遡っていって最初に見つかった .python-version 4 $(pyenv root)/version (特に指定しなければ $HOME/.pyenv/version ですね。これのことをを言っているんだと思います) の順です。 あなたが過去に /Users/name で pyenv local 3.10.0 を1回でも実行したなら、そこに .python-version ができます。今は《それ》が指定されている(とpyenvは思っている)という話でしょう。 cd /Users/name pyenv local --unset するといいかと。
quickquip

2022/02/03 06:22

ディレクトリの様子からすると、OSはmacOSでpyenvはhomebrewで入れた、みたいな感じですかね……
eggman

2022/02/03 13:57

はい、osはmacOSでpyenvはhomebrewで入れました。 それだと何か問題があったのですか????
eggman

2022/02/03 13:59

ご丁寧にありがとうございます。何とかしてpathなど綺麗にして思い通りに動くように修正したいのですが、、、 とりあえず指摘された通りにやってみます! 恐らくまた不明な点が出ると思いますが、よろしくお願いいたします。
quickquip

2022/02/03 14:01

そこの情報を隠されたら具体的なディレクトリ名とかを回答に書けないんですよ。
quickquip

2022/02/03 14:07

使っているシェルが質問に書いてあれば「シェルの設定からpyenv関連の記載を削除すれば十分ですね」なんて曖昧な書き方をする必要も無いんですよ。
eggman

2022/02/03 14:11

色々と追加しました。 他に何か必要な情報はありますでしょうか?
eggman

2022/02/03 15:00

今、pyenv local 3.10.1としたら、 system 3.10.0 * 3.10.1 (set by /Users/name/.python-version) と変更することができました。 しかしpyenv global 3.10.1とやっても変更できませんでした。 pyenv globalとlocalの違いってなんでしょうか? またこの状態でpython --versionとやってもpython2系のままでした。 簡単に仕組みを教えていただきたいです、、、 調べてはいるのですが、すっきりせずにいます。
quickquip

2022/02/03 15:12 編集

> またこの状態でpython --versionとやってもpython2系のままでした。 それはつまり、まだpyenvの環境設定が済んでない(というか間違えている)ということなんじゃないですか? こちら https://teratail.com/questions/364450#reply-495641 と同じなのでは?
quickquip

2022/02/03 16:04 編集

正しいことが書いてあって、公式の更新が適時反映されている、日本語で書かれたページというのがまず見つからないです。 そもそもそのようなサイトを探すためには、正しいことが書いてあってあるかどうかを判断する必要があります。そのためには公式を読まなきゃいけません。 またそのサイトの更新が滞って古くなったかどうかを判断するためには、公式の変更を知っておかないといけません。 結論: 日本語で探すより公式を読んだ方が早い です。 使ってみてわからないことを都度Teratailで質問する、とかの方が現実的です。 ただし、よくわからないので一通り説明してほしい、みたいな感じだとマイナス評価が積み上がると思います。
eggman

2022/02/04 09:40

ありがとうございます。 今 which python すると /usr/bin/python が表示され which python3をすると /usr/local/bin/python3になるのですがpythonのほうが元々既にあるpythonでpython3が違う方法でインストールしたpythonでしょうか? またpyenvでインストールしたpythonはどこに置かれるのでしょうか? 質問ばかりで申し訳ありません。
eggman

2022/02/04 09:45

% cat ~/.zprofile export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" を記入しているのにも関わらず、python --versionとやっても Python 2.7.18 になってしまいます。 % pyenv versions system 3.10.0 * 3.10.1 (set by /Users/soumar/.pyenv/version) ともなっています。
quickquip

2022/02/04 10:49 編集

/usr/bin/python はmacOSにもともと入っているシステム用のPython /usr/local/bin/python3 はhomebrewで入ったPython。自分で入れたのか、別のパッケージに必要で依存関係で入ったのかの区別はつきません。 > pyenvでインストールしたpythonはどこに 回答に書きました。 > を記入しているのにも関わらず、python --versionとやってもPython 2.7.18 になってしまいます。 その質問は見飽きたと言っている発言も引用しましたし、よい回答も示しました。 よい回答がすでにあるので私がわざわざ書く必要を感じません。
eggman

2022/02/04 11:44

はい、引用ではeval "$(pyenv init -)"を実行することで変更がなされる、と記載してありzprofileにそれを記載してあるのにも関わらず変更できないのが疑問です。 なるほど、同じpythonでもインストール方法によって変わるのですね。 また質問なのですが、pyenv以外で入れたpythonはpyenvでは操作できないのでしょうか? また知れべていたら、shimsというワードが出てきたのですが、これは一体なんでしょうか?
quickquip

2022/02/04 13:01 編集

いや、間違っています。書かれているとおりにできてません。 .zprofile に eval "$(pyenv init --path)" .zshrc に eval "$(pyenv init -)" です。 homebrewで入れたなら .zprofileに export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" は書きません。(書いても無駄なだけで問題はないです) むしろすべて指示されたことと逆をやってますよね。 「指定した優先度にしたがって何を実行するかを決めてくれる」コマンドがshimsに入っています。
eggman

2022/02/04 13:21

homebrewで入れたならexportは書かなくていいんですね。。。 聞いていいですか、なぜでしょうか??? pathを設定するのは、設定したpathにあるコマンドを簡単に呼べるために設定するという認識なのですがhomebrewで入れたらそれをする必要はないんですね。 あ、init --pathとinit- ですか!見落としてました。。。すいません、、、 ちなみにinit --path と init- ってどういう意味なんですか? 初期化処理なのはわかるのですが、、、 知識をください!!
eggman

2022/02/04 13:27

quickquicpさんに言われたことをやったら、which python したら /Users/soumar/.pyenv/shims/pythonになりました。。。 これは正しい位置に見えるのですが、一体何起ったのですか? pyenvの支配下にpythonがいったということでしょうか?
quickquip

2022/02/04 14:08 編集

> homebrewで入れたならexportは書かなくていいんですね。。。 pyenvコマンドが「homebrewが入っているところ」にあるからです。 > ちなみにinit --path と init- ってどういう意味なんですか? > 一体何起ったのですか? eval "$(pyenv init -)" のことは一番始めに回答に書きました。 eval "$(pyenv init --path)" は https://teratail.com/questions/364450#reply-495641 に書いてある通り export PATH="$HOME/.pyenv/shims:$PATH" が起こります。
eggman

2022/02/04 14:25

なるほど、ありがとうございます。 話が変わるかも知れませんが、自分のpcの様々な場所にインストールした複数のpythonのバージョンがあって、pyenvを使ってどのpythonを使うか切り替えられるといった感じでしょうか?
quickquip

2022/02/04 14:31

違います。(pyenvをハックしたら可能かもしれませんが、pyenv自身の目的/機能ではないです)
eggman

2022/02/04 14:34

あれ、、、 しかし、自分のpcに様々なバージョンのpythonがあるってことは確かですよね?? (自分でインストールした場合)(既存のpython2やインストールしたpython3、pyenvでインストールしたpythonなど)
quickquip

2022/02/04 14:48 編集

確かにpyenvの管理外に様々なバージョンのpythonを置くことはできますし実際"ある"ケースが多いですが、pyenvが管理するものではないのでそれらを切り替えるみたいなことはできません。(同語反復ですが、そうとしかいいようがないです)
quickquip

2022/02/04 14:47

pyenvはそういうものじゃないので。
eggman

2022/02/04 14:52

なるほどですquickquipさん知識ありすぎるので、ちょっと面倒だと思いますが自分の様々な疑問を晴らしてほしいです。 まだ聞きたいことがあります。 ということはpyenvの管理下にあるpythonはもしかして/Users/user/.pyenv/shimsの配下にあるということでしょうか?
eggman

2022/02/04 14:57

まだあるのですが、今pycahrmdでflaskを使って学習を行いたいのですが、インストールできているはずなのにModuleNotFoundError: No module named 'flask' というエラーが出てしまっています。 自分で調べた結果、interpreterとして使っているpythonとflaskが紐づいていない、とのらしいのですがいまいちわかりません。 ターミナルでwhich flaskとやると/Users/user/.pyenv/shims/flaskと出るのですが、pip show flaskとやると/Users/user/.pyenv/versions/3.10.1/lib/python3.10/site-packages と出ます。 これも別々のflaskということでしょうか? (pycharmでインストールもしたし、pip install flaskともやりました。この2つの場所ってことか?)
quickquip

2022/02/04 15:05

pyenvの管理下にあるpythonは /Users/user/.pyenv/versions の下にあります。 例えば shims/python を実行した時、3.10.0の優先度が高い環境だとversions/3.10.0/bin/python を、3.10.1の優先度が高い環境だとversions/3.10.1/bin/python を、"system"の優先度が高い環境だとpyenv以降のPATHから実行します。 shimsの中にあるのは「何を実行するかを選んで丸投げする」だけのコマンドです。
eggman

2022/02/04 15:16

あーなるほどです。その優先度に応じた使用するpython(pyenvの管理下にある)を決める役割があるのがpyenvなんですね。 そのpyenvの管理外にあるpythonの切り替えはできないということですね。
eggman

2022/02/04 15:17

flaskのエラーについては厳しいでしょか??
quickquip

2022/02/05 00:27 編集

実体がversionsにあることと、shimsの役割の情報があれば、疑問点/分からない点が変化するだろうと思ってました。実体がversionsにあることと、shimsの役割を書いたのはflaskの件での(一部)回答でもあります。
eggman

2022/02/05 12:12

はいありがとうございます。 一回整理させていただきます。 pythonやパッケージの実体が入っている(pyenvで入れたもの)はversionsディレクトリに入っており、shimsに入っているのは何かを実行するコマンドということですね。 そしてshims/pythonで実行されるのは、優先度によって決まるということですね。 なるほどです。かなり勉強になりました。 勉強していく中でまたわからないことがあったら、ここでコメントさせていただきます。 お手数ですが、その時はまたお願いいたします。
guest

0

自己解決

理解できました。
ありがとうございました。

投稿2022/02/08 07:55

eggman

総合スコア21

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

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

0

pyenvがシェルスクリプトの関数で実装されているからです。

アンインストールの方法は、pythonをアンインストールする5つの方法
pyenvごとPythonをアンインストールする(Mac/Linux/Windows)を見てください。

投稿2022/02/01 17:19

ppaul

総合スコア24666

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

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

eggman

2022/02/02 15:41

ご回答いただきありがとうございます。 かしこまりました。 その方法を試してみて、またわからなかったら質問させていただきます! ありがとうございます。
eggman

2022/02/02 15:43

すいません、pyenvのアンインストロールでもまずpythonからアンインストールするのですか?
quickquip

2022/02/02 15:53

URL先を見てみましたが「なかなかひどいことが書いてある」という感想でした…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問