Python
Mac
環境構築
機械学習
データ分析

macOSに構築したPython環境を維持管理する(pyenv+Anaconda)

macOSに構築したPython環境を維持管理する(pyenv+Anaconda)

macOSに構築したPythonの開発環境を維持管理します。なお、この記事は、以下記事の続きです。

要件

  • Homebrewでインストールしたソフトウェアについて、最新の状態を保つこと
  • 作成したノートブック等が、バージョン管理されている状態を保つこと
  • 必要に応じ、仮想環境やパッケージの追加、更新、削除を行うこと
  • 他の構成に切り替える際に、Anaconda、pyenvをきれいに削除すること

構成

  • macOS High Sierra
  • Homebrew
  • pyenv
  • Anaconda
  • TensorFlow / Keras

概要

以下について記載します。

  • Homebrewの更新
  • Gitを使ったバージョン管理の実施
  • 仮想環境の追加
  • パッケージの追加
  • パッケージの更新
  • パッケージの削除
  • 仮想環境の削除
  • Anacondaの削除
  • pyenvの削除

注意事項

注意事項

  • コマンド内に<作成したワークスペース>等の記載がある場合、各自の環境に合わせて読み替えて実行してください。冗長となるので、特に見落としそうな箇所を除けば、但し書きを書いていません。
pyenv versions
python -V
cd <作成したワークスペース>
pyenv versions
python -V
pyenv local anaconda<バージョン>
pyenv versions
python -V
  • コマンドは、一行ずつ実行してください。
  • 何かをインストール、設定したはずなのに、-bash: hoge: command not foundと言って怒られるときは、コマンドexec $SHELL -lで、シェルを再起動させると大体うまくいきます。

参考サイト

項目1. Homebrewの更新

目的

  • Homebrew、Homebrew-Cask自体を最新化する
  • Homebrew、Homebrew-Caskでインストールしたソフトウェアを最新化する
  • Homebrew、Homebrew-Caskのキャッシュを削除する

やること

  • Homebrew

    • brewできる状態であることの確認
    • Homebrew自体の更新
    • formulaの更新
    • 古いcellarの更新
    • 古いcellarとダウンロードキャッシュの削除
  • Homebrew-Cask

    • Homebrew-Cask自体の更新
    • 最新のCaskのプルダウン
    • 古いCaskの更新
    • 古いキャッシュの削除

手順

  • ターミナルを起動し、以下コマンドを実行する。
brew doctor
brew update
brew upgrade
brew cleanup
brew cask upgrade
brew cask cleanup —outdated

補足

  • brew update時に、Homebrew-Cask自体の更新、最新のCaskのプルダウンも行われます。
  • brew upgradebrew cleanupの代わりに、brew upgrade --cleanupを実行しても構いません。
  • brew cask installでインストールしたソフトウェアの内、例えばGoogle Chromeのように、ソフトウェア自体にアップグレード機能が付いているものは、brew cask upgradeではアップグレードされません。各ソフトウェアの機能を使ってアップグレードしてください。
  • Homebrewの用語(brew, celler, formula...)については、参考サイトの五番目がわかりやすいです。(ちなみに、caskは樽を意味します。)

参考サイト

項目2. Gitを使ったバージョン管理の実施

目的

  • 作成したノートブック等が、バージョン管理されている状態を保つ

やること

  • GitHubのアカウントの作成
  • Gitがインストールされていることの確認
  • GitのGUIクライアントのインストール
  • バージョン管理の実施

手順

  • GitHubにて、アカウントを作成する。
  • ターミナルより、コマンドgit --versionを実行し、gitがインストールされていることを確認する。
  • GitのGUIクライアント一覧を確認し、自分好みのクライアントを見つける。ここでは、GitHub公式、かつ、初心者向けの「GitHub Desktop」を選んだものとする。
  • ターミナルを起動し、コマンドbrew cask install githubを実行する。
  • GitHubのWebメニュー(サインインが必要)、および、インストールされた「GitHub Desktop」を用いて、随時、バージョン管理(リモートリポジトリの作成、クローン、コミット、プッシュ)を実施する。

補足

  • 環境構築時、Command Line Toolsをインストールした際に、Gitがインストールされているはずです。
  • 中上級者には、動作の早いらしい「GitUp」が良いかもしれません。コマンドbrew cask install gitupでインストールできます。
  • Gitの仕組みについては、参考サイトの二番目がすごくわかりやすいと思います。
  • コミットメッセージに迷う(間違った)、あるいは、コミットの頻度に迷う場合は、参考サイトの三番目以降が参考になります。

参考サイト

項目3. 仮想環境の追加

目的

  • 仮想環境を追加する

やること

  • 仮想環境の作成
  • 仮想環境をJupyter Notebookのカーネルとして追加

手順

  • ターミナルを起動し、ワークスペースに移動後、以下いずれかのコマンドを実行する。

    • 既存環境をクローンする場合は、conda create -n <クローン先環境名> --clone <クローン元環境名>
    • 新規に環境を作成する場合は、conda create -n <仮想環境名> python anaconda
  • ターミナルを起動し、以下コマンドを実行する。

cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
jupyter kernelspec list
ipython kernel install --user --name=<仮想環境名> --display-name=<Jupyter Notebook上での表示名>
jupyter kernelspec list
conda deactivate

補足

  • 既存環境をクローンする場合、クローン元環境と同じバージョンのパッケージがインストールされます。
  • 新規に環境を作成する場合、anacondaというフルパッケージが不要なら、pythonのみとし、随時必要なパッケージを追加していく形でも構いません。
  • コマンドconda activateconda deactivateは、condaのバージョンが4.4以上、かつ、構築手順5で機能拡張済みの場合に利用可能となります。source activatesource deactivateは、シェルごと落ちることがあるので、condaコマンドの利用を推奨します。

参考サイト

項目4. パッケージの追加

目的

  • 仮想環境にパッケージを追加する

やること

  • 追加したいパッケージを検索
  • パッケージの追加を検証
  • パッケージを追加

手順

  • ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda search <パッケージ名>を実行し、追加可能なパッケージを検索する。パッケージが見つからない、あるいは、明らかにバージョンが古いようなら、次手順(リポジトリへのアクセス)に移る。最新パッケージが見つかった場合は、コマンドconda install --dry-run <パッケージ名>を実行する。変更予定内容が出力されるのでよく確認する。特にダウングレードされるパッケージがある場合は、内容をよく確認する。問題なさそうなら、コマンドconda install <パッケージ名>を実行する。最後に、仮想環境から抜けて、手順終了。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda search <パッケージ名>
conda install --dry-run <パッケージ名>
conda install <パッケージ名>
conda deactivate
  • 前の手順で、パッケージが見つからない、あるいは、明らかにバージョンが古いようなら、condaリポジトリにアクセスし、追加したいパッケージを検索する。通常、複数のチャンネル(owner)がヒットするので、暫定的に、ダウンロード数が多く、かつ、バージョンの新しいものを選択する。ターミナルを起動し、ワークスペースに移動後、コマンドconda install --dry-run -c <チャンネル> <パッケージ名>を実行する。変更予定内容が出力されるのでよく確認する。特にダウングレードされる関連パッケージがないか注意する。その場合は、他のチャンネルでも試してみる。最終的にチャンネルが決まったら、コマンドconda install -c <チャンネル> <パッケージ名>を実行する。最後に、仮想環境から抜けて、手順終了。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda install --dry-run -c <チャンネル> <パッケージ名>
conda install -c <チャンネル> <パッケージ名>
conda deactivate

補足

  • 実環境(base)は、構築時の状態のまま残しておくのがベターかなと思います。何か問題が発生したとき、構築時の状態に戻すために、Anacondaの再インストールが必要だからです。何も問題が発生していないなら、特に気にする必要はありませんが…。
  • 仮想環境でコマンドcondaを使うためには、condaのバージョンが4.4以上、かつ、構築手順5で機能拡張しておく必要があります。バージョン管理の一貫性のため、是非機能拡張しておきましょう。
  • パッケージを追加するコマンドには、pipcondaがあります。例えば、TensorFlow公式サイトでは、公式でなくコミュニティサポートとの但し書き付きで、pipでのインストールを指示していたりします。しかし、pipは使わない方がベターでしょう。結局、pipcondaも同じ場所(~/.pyenv/versions/anaconda<バージョン>/lib/python<バージョン>/site-packages/)にパッケージをインストールしますが、condaから見たとき、二重にパッケージがインストールされているように見えるなど、バージョン管理が混乱するためです。参考サイトの二番目のように、実害が出るケースもあるようです。したがって、一貫してcondaを使うのが良いと考えられます。

参考サイト

項目5. パッケージの更新

目的

  • condaを最新バージョンに更新する
  • 仮想環境のpythonを最新バージョンに更新する
  • 仮想環境のpythonをダウングレード、あるいは、メジャーアップデートする
  • 仮想環境のすべてのパッケージを、最新バージョンに更新する
  • 仮想環境の特定パッケージを、最新バージョンに更新する
  • 仮想環境の特定パッケージを、特定バージョンに更新する

やること

  • パッケージの更新を検証
  • パッケージを更新

手順

  • condaを最新バージョンに更新するには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動する。次に、コマンドconda update --dry-run -n base condaを実行する。変更予定内容が出力されるのでよく確認する。問題なさそうなら、コマンドconda update -n base condaを実行する。
cd <ワークスペース>
conda update --dry-run -n base conda
conda update -n base conda
  • 仮想環境のpythonを最新バージョンに更新するには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda update --dry-run pythonを実行する。変更予定内容が出力されるのでよく確認する。問題なさそうなら、コマンドconda update pythonを実行する。最後に、仮想環境から抜ける。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda update --dry-run python
conda update python
conda deactivate
  • 仮想環境のpythonをダウングレード、あるいは、メジャーアップデートするには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda install --dry-run python=<バージョン>を実行する。変更予定内容が出力されるのでよく確認する。問題なさそうなら、コマンドconda install python=<バージョン>を実行する。最後に、仮想環境から抜ける。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda install --dry-run python=<バージョン>
conda install python=<バージョン>
conda deactivate
  • 仮想環境のすべてのパッケージを最新バージョンに更新するには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda update --dry-run --allを実行する。変更予定内容が出力されるのでよく確認する。特にダウングレードされるパッケージがある場合は、内容をよく確認する。問題なさそうなら、コマンドconda update --allを実行する。最後に、仮想環境から抜ける。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda update --dry-run --all
conda update --all
conda deactivate
  • 仮想環境の特定パッケージを最新バージョンに更新するには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda update --dry-run <パッケージ名>を実行する。変更予定内容が出力されるのでよく確認する。問題なさそうなら、コマンドconda update <パッケージ名>を実行する。最後に、仮想環境から抜ける。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda update --dry-run <パッケージ名>
conda update <パッケージ名>
conda deactivate
  • 仮想環境の特定パッケージを特定バージョンに更新するには、以下手順を実施する。まず、ターミナルを起動し、ワークスペースに移動後、仮想環境に入る。次に、コマンドconda search <パッケージ名>で、更新可能なバージョンを確認する。続いて、コマンドconda install --dry-run <パッケージ名>=<バージョン>を実行する。変更予定内容が出力されるのでよく確認する。問題なさそうなら、conda install <パッケージ名>=<バージョン>を実行する。最後に、仮想環境から抜ける。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda search <パッケージ名>
conda install --dry-run <パッケージ名>=<バージョン>
conda install <パッケージ名>=<バージョン>
conda deactivate

補足

  • 現在追加されているパッケージは、コマンドconda listで一覧表示できます。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda list
conda deactivate
  • conda updateの代わりにconda updgradeでも構いません。エイリアスの関係なので、自分にとって自然な方を利用すればOKです。

参考サイト

項目6. パッケージの削除

目的

  • 仮想環境からパッケージを削除する

やること

  • パッケージの削除を検証
  • パッケージを削除

手順

  • ターミナルを起動し、以下コマンドを実行する。変更予定内容が出力されるのでよく確認する。
cd <ワークスペース>
conda info -e
conda activate <仮想環境名>
conda uninstall --dry-run <パッケージ名>
  • 問題なさそうなら、以下コマンドを実行する。
conda uninstall <パッケージ名>
conda deactivate

補足

  • conda uninstallの代わりにconda removeでも構いません。エイリアスの関係なので、自分にとって自然な方を利用すればOKです。
  • 変更予定についてですが、例えば、パッケージAがパッケージBに依存している場合、Bの削除時にAが削除されるのは、むしろパッケージ管理的に問題ないと考えられます。そのような観点で確認します。

参考サイト

項目7. 仮想環境の削除

目的

  • 仮想環境を削除する

やること

  • 仮想環境をJupyter Notebookのカーネルから削除
  • 仮想環境の削除

手順

  • ターミナルを起動し、ワークスペースに移動する。コマンドjupyter kernelspec listを実行し、カーネルの存在するディレクトリを確認する。確認したディレクトリを手動で削除する。
  • ワークスペース内で、コマンドconda uninstall -n <仮想環境名> --allを実行する。
cd <ワークスペース>
jupyter kernelspec list
conda info -e
conda uninstall -n <仮想環境名> --all
conda info -e
conda deactivate

補足

  • conda uninstallの代わりにconda removeでも構いません。エイリアスの関係なので、自分にとって自然な方を利用すればOKです。

参考サイト

項目8. Anacondaの削除

目的

  • Anacondaを削除する

やること

  • 仮想環境をJupyter Notebookのカーネルから削除
  • Anaconda削除ツールのインストール、実行
  • Anacondaのディレクトリ一式の削除
  • (必要に応じ)バックアップの削除
  • Bash設定ファイルからAnaconda関連の記載を削除
  • アプリケーションから、Anaconda-Navigator.app(リンク)を削除

手順

  • 項目7を参考に、仮想環境をJupyter Notebookのカーネルから削除する。
  • ターミナルを起動し、以下コマンドを実行する。なお、コマンドanaconda-clean実行時、command not foundと言われたら、exec $SHELL -lで、シェルを再起動させるとうまくいく。
cd <ワークスペース>
conda install anaconda-clean
anaconda-clean
  • Finderでホームに移動し、[command] + [shift] + [.]で、隠しファイルを表示する。~/.pyenv/versions直下から、ディレクトリanaconda<バージョン>一式を削除する。
  • ディレクトリ~/.anaconda_backupの中身を確認し、不要と思えれば削除する。他の構成に切り替え後、再利用できそうなら残しておく。迷う場合は、大した容量ではないので、残しておく。
  • ~/.bashrcから、構築手順5で追加した記載を削除後、コマンドsource ~/.bashrcを実行するか、コマンドexec $SHELL -lで、シェルを再起動させる。
  • アプリケーションアイコンをクリックし、「Finderで開く」をクリックする。ウィンドウが開いたら、Anaconda-Navigator.app(リンク)を削除する。

参考サイト

項目9. pyenvの削除

目的

  • pyenvを削除する

やること

  • ワークスペースに対する設定の削除
  • pyenvの削除
  • Bash設定ファイルからpyenv関連の記載を削除

手順

  • Finderでワークスペースに移動し、ファイル.python-versionを削除する。
  • ターミナルを起動し、コマンドbrew uninstall pyenvを実行する。
  • Finderでホームに移動し、ディレクトリ.pyenv一式を削除する。
  • ~/.bash_profile~/.bashrcから、構築手順4で追加した記載を削除後、コマンドsource ~/.bash_profilesource ~/.bashrcを実行するか、コマンドexec $SHELL -lで、シェルを再起動させる。

参考サイト