WLS2 + Anaconda + PyCharm によるPythonの環境構築

[以前の記事](https://qiita.com/sota_morita/items/48cb64fe220aa3e1e2a0)で、WLS+VS Codeを使ってPythonの環境構築をした。しかしUdemyの講義を進めていくうちに、**WLS2 + Anaconda + PyCharm**でもっと良い環境を作りたいと思い立ったので、記しておく。

まず参考にしたUdemyの講義とそれぞれの環境を記す。

* [【徹底的に解説！】Djangoの基礎をマスターして、3つのアプリを作ろう！](https://www.udemy.com/course/django-3app/learn/lecture/23383994#overview)

|||
|:--|:--|
|OS|Ubuntu 20.04 LTS|
|仮想環境|Pythonの`venv`コマンド|
|エディタ|Visual Studio Code|

* [科学技術計算のためのPython入門](https://www.udemy.com/course/science_by_python/learn/lecture/23625320#overview)

|||
|:--|:--|
|OS|Windows10|
|仮想環境|Anacondaの`create`コマンド|
|エディタ|PyCharm|

前者の環境はWSLを使ってLinuxのOSを使うことができるのがメリットであり、後者はAnacondaで簡単に仮想環境を構築し、かつPyCharmでデバックやGitによるバージョン管理など便利な機能が備わっていることがメリットである。

そこで、**この2つの良いとこどりをしたい！**という発想に至った。ついでにWSLはWSL2という新しいバージョンが使えるようなので、こちらも更新しておく。結果、**WLS2 + Anaconda + PyCharm**という環境が出来上がった。

更新に先立って、もともとインストールしてあったUbuntu 20.04 LTSとPyCharmはアンインストールした。

# WSLからWSL2への更新

Windows Subsystem for Linux（WSL）は、WindowsでLinuxを使えるようにするためのものである。講義をきっかけに利用するようになったが、WSL2という新しいバージョンがあることを後から知った。というのも、Linuxディストリビューション（Ubuntuなど）をWindowsにダウンロードしても、自動的にWSL2が使えるようになるわけではなく、インストール前にいくつかの設定を済ませておく必要があるからだ。

WSLのままでも十分問題ないが、WSL2に変えるメリットはある。その一つとして、**Virtual Machine（VM）**という仕組みを使うことが挙げられる。これにより、今まで以上にLinuxとの互換性が高まり、流行りのDockerも使うことができる[^1]。

[^1]: [「WSL 2」が正式リリース！ ～「WSL 1」とのメリットは？ 「Windows Terminal」にも注目](https://forest.watch.impress.co.jp/docs/shseri/win10may2020/1250493.html)

## 1. Windows10が最新かを確認する

さて、更新の動機ができたところでWSL2の設定に移る。基本的にはMicrosoftのドキュメント[^2]にしたがうだけで特に難しいところはない。

[^2]: [Windows Subsystem for Linux Installation Guide for Windows 10](https://docs.microsoft.com/en-us/windows/wsl/install-win10)

WSL2を使うためにはWindowsのバージョンが1903以上、ビルドが18362以上である必要がある。`Windowsキー + r`でRunを開き、`winver`と入力して`Enter`を押せば、今のバージョンとビルドを確認することができる。要件を満たしていなければ[Windows Update Assistant](https://www.microsoft.com/ja-jp/software-download/windows10)で更新をする。

今回は要件を満たしていたため次に進む。

## 2. Windows機能の有効化

WSL2を使うために、**Windows Subsystem for Linux**と**Virtual Machine**という機能を有効化する。もともとWSLを使っていればWindows Subsystem for Linuxは既に有効化されているので省略できるが、一応方法を記しておく。コントロールパネルからも有効化は可能であるが、今回はPowerShellを使う。

PowerShellを管理者として起動し、次のコマンドをそれぞれ実行してPCを再起動すると、有効化が完了する。

```:PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

## 3. カーネルコンポーネントのアップデート

以下のリンクにアクセスすると最新のカーネルコンポーネントを入手することができる。指示にしたがってアップデートをおこなえばよい。

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

## 4. WSL2をデフォルトのバージョンに設定する

再びPowerShellを開き、以下のコマンドを実行する。これで、次回からLinuxディストリビューションがインストールされたときにはWSL2を使用することになる。

```:PowerShell
wsl --set-default-version 2
```

## 5. Linuxディストリビューションをインストール

これで準備が整ったので、Microsoft StoreからLinuxディストリビューションをインストールする。

[以前の記事](https://qiita.com/sota_morita/items/48cb64fe220aa3e1e2a0)と同じくUbuntu 20.04 LTSをインストールし、usernameとpasswordの設定、日本語化をおこなった。

## 6. バージョン確認

最後に、WSL2の設定になっているか確認する。コマンドプロンプトを開き、`wsl --list --verbose`を実行すると、確かにバージョン2になっていることがわかる。

```
>wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
```

# UbuntuにAnacondaをインストール

もともとWindows版のAnacondaはインストールしてあったが、今回はUbuntuでAnacondaをインストールする。つまり、Linux版のAnacondaをインストールすることになる。これで、[以前の記事](https://qiita.com/sota_morita/items/48cb64fe220aa3e1e2a0)では慣れないコマンドに困惑した仮想環境の構築が容易になる。

Linux版のインストールなので、Chromeから普通に検索してダウンロードしてもうまくいかない。そこで、Ubuntuのターミナルから直接インストーラをダウンロードする方法をとる[^3]。

[^3]: [UbuntuにAnacondaをインストールしてPythonとJupyter Notebookを動かすまでの手順](https://www.virment.com/setup-anaconda-python-jupyter-ubuntu/)

Anacondaのホームページから*Indivisual Edition*を探し、Linuxの*64-Bit (x86) Installer*のリンクのアドレスをコピーする。そのアドレスを`wget`コマンドの後ろに書けばよい。

```
$ wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
```

ダウンロードが完了したら、`bash`コマンドでアドレスの "Anaconda3~" 以下を実行する。

```
$ bash Anaconda3-2020.11-Linux-x86_64.sh
```

すると、利用規約や保存場所の確認などが次々に現れるので、`yes`や`Enter`でサクサク進めると、インストールが完了する。

インストールが完了したら、`.bashrc`への変更内容を反映させる（Ubuntuの再起動でも可）。

```
$ source ~/.bashrc
```

この状態でバージョンを確認すると、無事にインストールが確認できる。

```
$ conda -V
conda 4.9.2
```

なお、`.bashrc`を再読み込みした後から、コマンドラインの先頭に`(base)`という文字が表示され鬱陶しい。Ubuntuを再起動しても表示されたままである。調べてみると`auto_activate_base`が`True`になっているからのようだ[^4]。以下のコマンドを実行し、`$ source ~/.bashrc`で再読み込み、またはUbuntuの再起動で解決する。

[^4]: [Why does “(base)” appear in front of my terminal prompt?](https://askubuntu.com/questions/1026383/why-does-base-appear-in-front-of-my-terminal-prompt)

```
$ conda config --set auto_activate_base False
```

あとは今まで通り、Ubuntuのターミナルから`conda create -n 仮想環境名 python=バージョン名`で仮想環境を構築すればよい。Ancondaでの仮想環境の構築は以下を参照。

[【初心者向け】Anacondaで仮想環境を作ってみる](https://qiita.com/ozaki_physics/items/985188feb92570e5b82d)

# PyChermでWSLを利用する

Linux版Anacondaのインストールも完了し、実現したいことはほぼ終わった。[以前の記事](https://qiita.com/sota_morita/items/48cb64fe220aa3e1e2a0)で、Visual Studio CodeにおけるWSLの設定をおこなったので、これを使えばいいのだが、どうせならより高機能なPyCharmを利用したい。

PyCharmのガイダンス[^5]によれば、WSLなどのリモート開発環境の使用はProfessional版に限定されるようだ。がっかりだと思ったのも束の間、学生を含め教育機関に所属する人ならPyCharmをはじめとするJetBrainsのサービスが**無料**で使えるようだ[^6]。幸運なことに私は学生なので、早速これを利用する。

[^5]: [WSL を使用してインタープリターを構成する ](https://pleiades.io/help/pycharm/using-wsl-as-a-remote-interpreter.html)

[^6]: [JetBrainsの学割の申請方法について](https://qiita.com/tetrapod117/items/92f965cf1928739b70e4)

JetBrainsのページ (https://www.jetbrains.com/ja-jp/community/education/#students) から**「今すぐ申し込む**」を選択し、アカウント登録をする。このメールアドレスに`.ac.jp`で終わる大学のメールアドレスを登録する。すると登録したアドレス宛にメールが届くので、記載されているリンクをクリックすれば認証が完了する。

![PyCharm free licence](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854965/0b8f99ab-3514-5b1c-7405-39db91001117.png)

Windows版（Linuxではなく）のPyChermインストーラーをダウンロードし、インストールを開始する。初めにメールアドレスと登録したパスワードを聞かれるので、無料のライセンスを登録したアカウントでログインする。これでProfessional版の利用を開始できる。

あとはPyChermのガイド[^5]に沿って設定をおこなう。

PyCharmを開き**File** → **Setting** → **Project** → **Python Interpreter**を選択する。

![PyCharm Python Interpreter](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854965/29150ed9-4595-a2e0-6132-8692c4593036.png)

Python Interpreterは`<No interpreter>`となっている。その右側にある設定マークから**Add...**を選択 → 左側のペインから**WSL**を選択 → Linux Distributionに **`Ubuntu 20.04`** → Python interpreter pathに`\\wsl$\Ubuntu-20.04\home\ユーザー名\anaconda3\envs\仮想環境名`など、目的に合った環境を選ぶ。

今まではWindowsとUbuntuの両方を使っていたため、講義によって環境を使い分ける必要があったが、PyChermだけで簡単に切り替えができるようになった。今後も良さそうな環境があればアップデートしていきたい。

![PyCharm Python interpreter path](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854965/f0124058-daba-19ee-6b3d-d837e871f33d.png)

Udemyの講義は環境構築を学ぼうと思って申し込んだわけではないが、たまたま違う環境を使っていたので、とても役に立った。念のため再びリンクを張っておく。

* [【徹底的に解説！】Djangoの基礎をマスターして、3つのアプリを作ろう！](https://www.udemy.com/course/django-3app/learn/lecture/23383994#overview)

* [科学技術計算のためのPython入門](https://www.udemy.com/course/science_by_python/learn/lecture/23625320#overview)