コマンドライフ

Windowsでコマンドライフ2:minicondaでpython環境構築

はじめに

Windowsでコマンドライフシリーズの二回目です。今回はminicondaを使って、pythonを便利に使うための環境づくりをします。

注意(重要)

この記事ではminicondaのインストールを紹介しますが、

!!! まず、minicondaのインストールは、pythonのインストールです。!!!

この記事は、対象となるパソコンに、

  • pythonをインストールしたことがない
  • pythonをインストールしたことがあるのかどうか、覚えていない — (1)

こと、すなわち、現在意識して使っているpythonはないこと、を前提としています。(1)の場合、何かが静かに起こってしまう可能性がありますが、覚えてすらいないことについてなので、きっと問題にはならないはずです(運悪く思い出してしまわない限り)。

また、Anacondaが導入されている場合には、minicondaの導入はほぼ無意味です。ここで紹介するcondaコマンドがすでに使えるはずですので、準備は整っています。

インストールしたpythonがある、という方は次を読んで、決心を固めてください。

自分で導入したpythonがあるところへminicondaを導入するとどうなるか

minicondaのインストールが既存のpythonのpath設定に影響をあたえる可能性があります(既存のものも使うなら問題)

あるいは

既存のpythonのpath設定が優先されてしまい、minoconda側のpath設定がうまく通らないことがあります(経験済み。困る)

いずれにせよ、search pathの設定問題に帰着するので、解決可能だと思うのですが、とくにWindowsではシステムレベル、ユーザーレベル(Windowsが管理しているもの、あんど、home directory直下のドットファイルたち)さらにはAppData folder内のわかりにくい場所などいろいろあって、現時点できれいな一筋縄をお見せできる自信がありません。また、そのへんのうるさいことに悩まされることなくpythonを使う方法を提供するのがminicondaであり、それを紹介するのがこの記事の目的なので、なんだかこの段落を書いていること自体、抜け出せないループにいるように思えます。condaコマンドでのpython実行環境切り替えのキモは、path設定の便利切り替えにあるわけですし。

結論:minicondaに乗り換えるか、今のものを使うか、どちらかにするのが得策。乗り換えるなら既存のものをアンインストール、乗り換えないならcondaはあきらめvenvを使う、同居させるならpath設定の管理を自力で行う。

miniconda、anacondaとはどう違うの?

導入されるものの量が違います。anacondaはいわゆるデータサイエンスに触れるのためのもの一式を大型トレーラー数台で運んできます。minicondaはcondaコマンドでpythonの実行環境を管理するためのツールを軽トラ一台で運んできます。今回の目的である、condaコマンドを使えるようにする、という点に限ってみるとどちらにも違いはありません

この記事ではcondaコマンドを使ったpythonの実行環境構築を紹介しようとしています。割り切って言いますと、condaコマンドがほしい。condaコマンドはanaconda、miniconda両方についてきますから、どちらでも違いはありません。すでにanacondaをインストールしてある場合には、minicondaをインストールする必要はありません

Anacondaは、データサイエンスというものを始めたい、始めた人になりたい、始めたらどういう感じがするか知りたい、触れてみたい、本を買ったのでそれに沿って勉強したい、という場合に非常に便利な、ほぼ全部入りスターターキットです。Anacondaを導入すればwebや本のチュートリアルに沿って行く場合に、jupyterなんじゃそりゃ?とか、モジュールがありませんとか、バージョン要求が満たされていません、などなど、本質ではない(本気で進めばやがてそれらは本質と言えるものになりますが)あれこれにじゃまされることなくひとまず進んでみることができます。また、すでに黒帯を取得した方が、誰かに教える機会を得た時には、anacondaを導入しましょう、と言っておくとみなが同じてんこ盛りお道具箱を持った状態で始められるという、教える側の便利事情もあります。(途中で糊がないだの、分度器がないだの言いだす生徒さんがいないことは重要です)

さて、anacondaとの親和性が非常に高いデータサイエンスということばですが、あまりに守備範囲が広くて、人間のうちのスポーツ選手、といっているぐらい範囲が広いですし(わかりにくい)、なによりこの記事の目的である、pythonの実行環境構築やその管理には、anacondaはtoo muchです。のちのちminicondaを使ってanacondaが提供するものと同等のものを構築することが可能ですので、minicondaでいきます。

minicondaのインストール

ここではWindowsへの導入について書きます。(macOSやLinuxについては別途導入方法を検索してください。どちらもbash scriptで一発です)

インストーラーのダウンロード

https://docs.conda.io/en/latest/miniconda.htmlを開きます。スクロールしてLatest Miniconda Installer Linkをチラ見しつつ、Windows installersにある一覧を見ます。Python 3.9, 3.8とか64-bit, 32-bitが見え、どれを選んだらいいのか、latestでいいんじゃないのか、と思ってしまいます。この記事はpythonの実行環境構築と管理の記事です。テキトーに選ぶ、ではいけません。以下を理解します。

  • ここで導入するpythonはbaseとよばれるenvに入る。このbaseにあるpythonとcondaコマンドを用いて、作業用のenvを構築する。その際baseのものとは独立にpythonのversionを選ぶことができる。baseのpythonは最新のものがよい。
  • 32-bitしか動かないパソコンを使っているのかどうか。そうでない、わからない場合は64-bitで行ってみるべし。32-bitは理由がある場合のチョイス。

Python3.9、64-bitのものを選びます。SHA256 hashを見るとわかりますが、Python 3.9のところにあるMinoconda3 Windows 64-bitはLatestの表にある、Minoconda3 Windows 64-bitと同一のものです。SHA256 hashはあとでチェックします。

Windows installersのところにある、Miniconda3 Windows 64-bitをクリックしてインストーラーをダウンロードします。

SHA256 check sumのチェック

インストーラーをダブルクリックしたい衝動を抑えつつ、今取ったファイルが正しいものかどうかのチェックをします。

git bash, cmderなどのターミナルエミュレーターを起動して、Downloads folderへcdします。(cdします、って何?と思った方は前回の記事をご覧ください。)

以下に示すようにsha256sumコマンドあるいはWindowsに標準でついてくるcertutilコマンドを使って、いまダウンロードしたファイルのsha256 sumをチェックします。この作業は面倒がらずにやりましょう。配布元の言っているものと同一であれば、ファイルが壊れていたり、実は別のリンクに誘導された改変物を取らされたのではないことが確認できます。

もちろんもともとのページ自体が偽物だったらどうしようもありませんが。それはbrowserのURL窓をよくよくみて確認するか、別ソースがあればそこにあるものも見てみて念を入れることもできます。たとえばいまのダウンロードページの場合、GitHubにも同じものがあります。👉https://github.com/conda/conda-docs/blob/main/docs/source/miniconda.rst

コマンドは以下の通りです。

sha256sum Miniconda3-py39_4.12.0-Windows-x86_64.exe
# あるいは
certutil -hashfile Miniconda3-py39_4.12.0-Windows-x86_64.exe sha256

やっとインストール

インストーラーをダブルクリックしてウィザードに従うだけですが、いくつか入力を求められますのであらかじめ見ておきましょう。

  • 自分のためだけにインストールします。もしパソコンにほかのユーザーのアカウントがあって、その人のためにもインストールしたい場合、そのアカウントでログインして同様にインストールをしましょう。システムワイドにインストールして誰もが同じように使えるようにするということも考えられますが、そもそもpythonの実行環境は個々のユーザーのため、もっと言えば、個々の作業内容に応じて構築するものなので、ユーザーごとのインストールをするほうがきれいです。
  • 自分のホームディレクトリ以下にインストールします。WindowsではC:\Users\USERNAMEがホームディレクトリです。
  • serch pathに必要なpathをインストーラーに追加してもらうかどうか。ウィザードではnot recommendedとなっています。どうしてかというと、すでにAnacondaやpythonがある場合、それらの設定より上位にpath設定が書き込まれるからです。私のパソコンにはAnacondaやpythonはないという場合には、インストーラーにお願いした方が楽です。そうではない場合、どうしてさらにminicondaをインストールするのか、既存のものとはどう使い分けるのかについてはっきりした考えと覚悟とが必要です。

それでは、インストーラーを起動してウィザードに従ってください。

一つ目。Just Meを選びます。

二つ目。自分のホームディレクトリ以下をセットします。下の例ではホームディレクトリ直下にminiconda3フォルダができ、そこにすべてが入っていきます。自分のホームディレクトリにlocalというフォルダをあらかじめ作っておいて、C:\Users\USERNAME\local\miniconda3をdestination folderとすればそのlocalフォルダの中にminiconda3フォルダができてきます。ポイントとしては日本語文字やスペースを入れないことです。pathに日本語文字やスペースがはいると本質的ではないトラブルに悩まされます(経験)。

三つ目。ここですね。[ana|mini]condaもpythonもこれが最初のインストールです、という場合は以下の設定(二つともにチェック)でいいと思います。

miniconda3のフォルダやファイルのインストール自体が既存のものを破壊することはないと思いますが、上にも書いたようにsearch path中の優先順位が変わる可能性があって、既存のものが使えない、あるいは今回インストールしたcondaへのpathが最優先されない、などの事態が起こりえます。その場合は個別に解決するしかありません。

Installボタンをおして先へ進み、インストールを完了してください。

インストールの確認

さて、インストールがうまくいっているかどうかは、condaコマンドへのpathが通っているかどうかで確認することができます。

インストールの前から開いていたターミナルは一度閉じて、開きなおしてください。

ターミナルを開き、以下確認をします。

  • which condaでcondaへのpathが通っていることを確認
  • which pythonでpythonへpathが通っていることを確認

python env (environment) の考え方

Pythonの実行環境(env, environment)って何について。

pythonは多岐にわたる場面で使われます。すべての用途に対応できるただ一つのシステムを構築しようとすると、無駄が多くなってしまいます。そこでライブラリと呼ばれる(中身はプログラムファイルの集まり)ものに異なる機能を受け持たせることにして、必要なものを必要な場面に応じて取り込んで機能させるという方法がとられています。大工仕事には鋸とカンナ、野球をするならバットとグローブとボール、試験を受けるなら鉛筆と消しゴムというように、いまから何をするかによって持ち物を変えることに似ています。

必要なものすべてを何でもかんでも一つの箱(環境)に詰め込んでもいいのですが、時折、以下のようなことが起こります。運動靴とスパイクシューズをそれぞれの機能に応じたライブラリだと思ってください。

  • 野球をするための運動靴を導入
  • テニスにも上の運動靴を流用することができた
  • 野球を本格的にすることになり、運動靴をスパイクシューズに買い替えた

ここである日、久々にテニスをすることになったとします。運動靴がスパイクシューズになっていたので、コートに入れてもらうことができず、テニスができませんでした。

実際、さまざまなライブラリをなんでもかんでも一つの環境に詰め込んで使っていると、アップデートや新たなライブラリを追加するタイミングで上に例えたような不適合(incompatibility)が発生することがあります。あれ?先月にはうまく動いていたのに、今日はエラーがでる。。。いつからダメになった?あ、先週machine learning用のライブラリを導入したんだった、きっとそのせいだ、というようなことが発生します。

そこで、場面に応じた、あるいは作業内容に応じた道具箱を用意することを考えます。野球の道具を入れておく箱、テニスをする時に持っていく箱をそれぞれ別々にしておけば、野球の都合でテニス用の運動靴がスパイクシューズになってしまうことを防ぐことができます。また、テニスを引退すればその道具箱を捨てることもできますし、新しく始めるアイスホッケー用の箱を新たに用意することもできます。

上で述べた箱をpythonの実行環境と考えてください。machine learningに関する作業をする時用のpython3.8と少し前のものではあるが安定度抜群のライブラリ、excelの自動化作業をする時のpython3.9とライブラリたち、少々不安定だがリリース直前の最新ライブラリを試すための実験的実行環境などなど。これらをそれぞれ独立のpython envとして管理するためのツールを提供するのがcondaコマンドです。

condaコマンドは、envの作製、削除はもとより、導入するライブラリの適合性のすり合わせも行ってくれます。乱暴にいうと、conda = pip + venvです。

次に主な使い方を見ていきましょう。

condaコマンドの使い方

自分の持っているenvの一覧を見る

まずは、いま自分がもっているenv(実行環境)の一覧をみてみましょう。

conda env list

今インストールしたばかりという場合でもbaseという名前が一番上に見えるはずです。これがminicondaでインストールされたもので、デフォルトの実行環境(以下、env)です。現在activateされているenvには*マークが付きます(矢印)。上の例では、P-22、dlbookという名前のenvがあり、現在baseがactivated(過去分詞便利)であることがわかります。

右側は、envのありか(path)を示しています。baseだけはminicondaの直下、それ以外はenvs以下にあるのがわかります。上でのP-22、dlbookの実体はフォルダで、その中にpython本体とライブラリが導入されていきます

envを作る

以下のENV_NAMEのところを作りたいenv名とします。スペースは使わないようにします。python=の部分ですが、これから作るenvのpythonのバージョンを指定します。そうです、ひとつひとつのenvには別々のpython殿が配属されて指揮をとります。python=3とするとpython3の最新のもの(e.g. 3.11.0)が、python=3.9とするとpython3.9の最新のもの(e.g. 3.9.13)、python=3.6.10とすればピンポイントでそのバージョンを指定して導入することができます。途中、Proceed ([y]/n)?と聞かれます。yはyes、nがnoです。また、[y]はデフォルトがyであることを示し、この場合、yと打たずにリターンするだけでyを選べます

conda create -n ENV_NAME python=3

どのpythonバージョンを導入するかは、そのenvでの作業内容によります。使いたいライブラリの要求するpythonバージョンをあらかじめ調べておくことになりますが、導入したいライブラリが動くために別のライブラリが入り、、、という連鎖が生じるので、実際は、やってみる、ほうが早道です。たとえば最新のpythonの入ったenvを作ってみて(e.g. 3.11.0)、エラーがでたらメッセージをよく見てgoogleで調べたり、単にバージョンを下げた(e.g. 3.10、3.9など)envを作って試す。envを自由に作ることができるとこういう対応ができるのです。もちろんいらなくなったenvはいつでも削除することができます。ここがminicondaを導入する利点です。envに導入するpythonのバージョンの決め方のヒントを下に並べます。

  • サンプルコードのついた本に従って勉強を進める場合:本の初めの方にどのpythonバージョンで動作を確認したかの記述があるはずなので、それにしたがいます。
  • 使いたいライブラリのページで、pythonのバージョン条件を調べる。
  • うまくいっている人に聞く。

私の経験で少々てこずった例は、scikit-leanというライブラリです。SVM(Support Vector Machine)を使って遺伝子型の判定をさせる仕事で、私の書いたコードが同僚のenvで異なる結果を与えてしまい苦戦したのですが、結局あるモジュールの関数名が新しいバージョンで変更されていたことが原因でした。scikit-learnのページには下のような記載があります。頭が痛くなりますが、こういうところに必要条件がはっきりと書かれていたりしますので、面倒がらずに目をとおしましょう。

Warning: Scikit-learn 0.20 was the last version to support Python 2.7 and Python 3.4. Scikit-learn 0.21 supported Python 3.5-3.7. Scikit-learn 0.22 supported Python 3.5-3.8. Scikit-learn 0.23 – 0.24 require Python 3.6 or newer. Scikit-learn 1.0 supported Python 3.7-3.10. Scikit-learn 1.1 and later requires Python 3.8 or newer.

env入ったり出たり

さて、作ったenv(実行環境)を利用する方法ですが、そのenvを使える状態にすることをenvに入ると表現することにします。また、その実行環境(env)の使用を終えて、デフォルトの実行環境(base)にもどることをenvから出ると表現することにます。

目的のenvに入るには、

conda activate env名

実行中のenvから出るには、

conda deactivate

とします。出る方はどこへ出るかを指定する必要はないので、deactivateだけで通じるわけです。行くぞ、と言われればどこへ?となりますが、帰るぞ、なら言わなくても家へであることと同じです。

プロンプトでのenv name表示

いまいるenv名はプロンプトの先頭に表示されます。下の例は、デフォルト(base)-> (P-22) -> (base)というround-tripをしたときの様子です。

env切り替えで実際におこっていること

私のbaseにはpython 3.8.3、P-22にはpython 3.10.6が入っています。この切り替えがenvの切り替えで起こっていることを見てみます。

python -Vはpythonのバージョンを表示させるコマンドです。P-22に入った後に打ったpython -Vは python 3.10.6と表示しています。

もう少しだけ踏み込んでsearch pathの話に触れます。whichコマンドは、あるコマンドがどこにあるのかを調べるためのコマンドです。base -> P-22でのpythonのありか(path)の変化を見てください。

デフォルトのbaseにいるときにwhich pythonと打つと、miniconda3直下のpythonがポイントされています。P-22に入った後に同じことをすると、今度はminiconda3/envs/P-22下のpythonがポイントされるようになっています。condaでのenv切り替えは、search pathの切り替えなのです。Search pathとは(google でも調べてください)あるコマンドをその名前だけで呼んだ時に、まず探しに行く道筋(path)のことです。今の場合、おーい、pythonと呼んでいるわけですが、pythonはパソコンの各地に複数人いる可能性があるわけで、どのpythonが返事をするかは、どこを先に探すか、にかかっています。baseではminiconda3の直下、P-22ではminoconda3/envs/P-22が最初に探されるようになっています。この何かを呼んだ時に探される場所のことをsearch pathと言い、実際その設定書がパソコンのどこかに書き込まれています(どこか、でごまかしました。すんません🙇)。Search pathにおける検索では、最初に見つかったものが当たりになりますので、その優先順序が重要です。Pathを設定したのに反映されないというときは、たいていそれより優位のpathが邪魔をしています。

面倒な話になってしまいましたが、condaコマンドがこのあたりを見事にハンドルしてくれますので、頼りにしましょう。Search pathに興味の出た方は、どんどん調べて勉強しましょう。pythonの設定に限らず、いろいろな場面で役に立つはずです。LinuxではWindowsよりもう少し見通しよくpath設定ができます。

ライブラリのインストール

まず、その、いまあなたがインストールしたいと思ったライブラリをどのenvに入れるのか、意識してください。Webや本などを見ながらok, ok, conda installね、とやってしまうと、うっかりbaseに導入してしまうことになります。

baseはきれいに保ちましょう

baseはbaseです。baseにあるpythonやpipを使って新たなenvたちが生み出されていきます。baseは管理室です。ここは常にうまく動いている必要があり、実験的に何かを導入して試したりするべきではありません。実験は別途、新たにenvを作ってそこで行うべきです。

ということで、ライブラリーを導入する前に、必ずどのenvに導入するのかを考える癖をつけましょう。すでにあるenvの延長線上の作業であれば、そのenvに入ってライブラリ導入します。もしこれからしようとすることが新しいことであれば、それ用のenvを用意しましょう。condaなら簡単です。

ライブラリ導入の仕方

まず、envに入ります。(baseには基本的に何も導入しないほうがいいですよ。)

condaコマンドで導入する場合には、一度”conda install 導入したいライブラリ名”でgoogleしてみてください。例えば、scipyを導入したいとします。Googleで最初に出てくるのがanaconda packageのページです。そこを見ると、このパッケージがいつアップロードされたのか、win-64の場合に導入されるバージョン(v1.9.3と見える)、導入のためのcondaコマンドを見ることができます。

基本的にconda install package名でいいのですが、中にはチャンネルを指定して導入するものもあります。-cオプションのargumentとして指定します。今の場合、anacondaチャンネルを-c anacondaで指定しています。ものによってはいくつものチャンネルに異なるバージョンのものが混在している可能性があるので、導入前にgoogle検索で調べることをお勧めします。他のチャンネルとしてはconda-forgeなどがあります。matplotlibについて調べてみてください。どばーっといくつもconda installの例が出ます。

pipコマンドで導入することもできます。webや本ではpip install…というものが書かれている場合も結構あります。その場合にも、一度googleしてみましょう。たとえば”pip install scipy”いま調べてみると、scipy本家のページにあたります。そこでは、

python -m pip install scipy

と書かれていますが、これは、envを作って作業している限り

pip install scipy

と全く同じです。このあたり、search pathの切り替えをしてくれる利点がばっちりきいてきます。興味のある方は、Why you should use python -m pipなどを読んでみてください。上に書いたsearch pathの話もより理解できると思います。

また、pipとpip3は、これまたenvを作って作業している限り、同一のものです。試しに下のコマンドでバージョンなどに違いがあるのか確認してみてください。とにかくenvという個別の実行環境を作って作業することにはたくさんの利点があるのです。

pip -V
pip3 -V

「envを作って作業している限り…同一」と二度も書いてしまいましたが、その理由は、envを作り、そこに入って作業をするとき、そこで打つpythonだのpipだのは、必ずそのenv内のものになるからです。python -m pipでは、そのenvのpythonがそのenvのpipを呼びます。pipとだけ呼んでも、そのenvのpipが呼ばれます。結局同じpipさんが呼び出されるわけです。envをうまく使えば、そのenvにあるもののバージョンにそぐわないpipやpythonが呼ばれてしまうことがないのです。だんだんおわかりいただけたのではないでしょうか。envを作ってそこで作業すると安全安心確実なのです。これをcondaコマンドが提供してくれるのです。

Googleでの検索で、pypiのページにあたることも多々あることと思います。たとえばrequests。ページには対応するpythonのバージョンやmaintainers, HomepageリンクからはGitHubのページなどに飛んでさらに詳しい情報にアクセスできるようになっています。いずれにせよ、こういうものが無料で提供されていることには感謝するしかありません。

condaか、pipか:混ぜるな危険?

ライブラリの導入にcondaとpipの両方を使わないほうがいい、というような情報をwebで呼んだことがあります。確かに一本槍でいければよいのですが、ライブラリによってはcondaのパッケージが見つからなかったり古すぎたりすることもあります。そんな場合には混ぜるしかありません。私の経験ではいまのところ混ぜて危険な目にあったことがありませんが、あくまでも私の経験内での話なので、何か起こってしまうこともあるかもしれません。でもそういうときのためにenvという隔離環境を作って作業しているわけですから、やりたいことを最優先させて、どんどん試してみるのがいいと思います。

envを削除する

どんどんenvを作って試してみましょうという路線を推している都合上、失敗や、一回の実験でenvがいらなくなった場合についてもふれます。

いらなくなったenvの削除には以下のコマンドを使います。ものによってはかなり大きなdisk容量を占めることがあるので、定期的にいらなくなったenvは見直して削除するようにしましょう。

conda env remove -n 削除したいenv名 --all

conda cleanについても

condaはいくつものpackageファイルをとって保存します。たまに以下のコマンドを走らせてディスクのお掃除をしましょう。このコマンド前後でのディスク空き容量の変化を見て、悦に入りましょう。

conda clean --all
ABOUT ME
misson
ものづくりが趣味。頭の中でモヤモヤと渦巻くガスを形として沈殿させるのが趣味。座右の銘その2は:未来は今の積分値


follow us in feedly

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です