Windows 10 WSL 2(Linux 用 Windows サブシステム) + LinuxでのPython環境作成手順
本ドキュメントはミラーです。最新の情報は以下Qiitaのドキュメントをご確認ください。:
概要
Windows 10における、WSL 2でのLinuxをインストール~Python仮想環境構築までを記載しています。
モジュール | 役割 |
---|---|
Python | (2)で説明 .pyを実行するインタプリタ |
pyenv | (3,4)で説明 Mac, LinuxでPythonインタプリタを切り替える(複数バージョンを共存)ために使用する |
venv | (4)で説明 Pythonの仮想環境を作成する(仮想環境は基本的にはプロジェクトごとに作成する)。pyenvでインストールされたpython3.3以降では既定で使用可能 |
(4)で説明していますが、pyenv
でインタプリタを切り替え、venv
で仮想環境を作成・切替を行うことで、プロジェクトごとに適した環境で開発を行います。
環境
- Windows 10 Pro バージョン 2004以降、または1903,1909ビルド18362以上
- Linux内のPythonのバージョン3.3以上(venv, pyenvの関係)
(1) WSL2環境構築
(1-1) [Windows] WSL2の有効化
以下の公式ページの手動インストールの手順に従い、WSL2を有効化する。
以降、Ubuntu 20.04 LTS を選択した前提で記載します。
💡 WSL2(Windows Subsystem for Linux)導入手順 - Qiita
(1-2) [Windows] インストールしたディストリビューションの起動
スタートメニューからUbuntuを選択します。
初回起動時は以下が表示されるので画面に従いユーザー名とパスワードを設定します。
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
(1-3) [Windows] Windows Terminalのインストール
wingetを利用してインストール
winget install -e --id Microsoft.WindowsTerminal
(1-4) [Windows] VSCodeのインストール
- User Installを使用する
- 右クリックでCodeで開くにチェックする
(1-5) [Windows] VSCodeで「Remote - WSL拡張機能」のインストール
-
「Remote - WSL拡張機能」をインストール
-
拡張機能をインストールしたら、VSCodeを再起動
-
「Remote - WSL拡張機能」をインストールすると「Remote Explorer」がVS Codeに追加される。Remote Explorerでは、Linuxディストリビューションに関する情報を確認できる。
(1-6) [Windows] VSCodeからWSL2上のUbuntuに接続する
-
VSCodeを起動し、「Remote Explorer」からUbuntuに接続する。
-
接続時に必要なコンポーネント(vscode-server)がUbuntuにインストールされる。
(1-7) [Linux] プロキシ設定
社内環境など外部接続にプロキシが必要な環境では、この項目の設定が必要です。
(1-7-1) 環境変数
Windows TerminalのUbuntuターミナルから実行
code ~/.bashrc
~/.bashrcの最後に追加
function proxy_on(){
HOST="XXX.XXX.XXX.XXX"
PORT="YYYY"
# 認証が必要なプロキシ
PROXY="http://$HOST:$PORT/"
export HTTP_PROXY=$PROXY
export HTTPS_PROXY=$PROXY
export FTP_PROXY=$PROXY
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
export NO_PROXY="localhost,127.0.0.1"
export no_proxy="localhost,127.0.0.1"
}
proxy_on
💡 Linux環境から社内環境のGitサーバーを参照する場合はNO_PROXYに追加する。
bashに反映
source ~/.bashrc
(1-7-2) aptの設定
💡 sudo
で実行する場合は、環境変数が引き継がれません。sudo http_proxy=${http_proxy} https_proxy=${https_proxy} <コマンド>
という形でもかまいませんが、頻繁に実行する可能性があるapt
については、設定ファイルに記載しておきます。
sudo vi /etc/apt/apt.conf
Acquire::http::Proxy "http://XXX.XXX.XXX.XXX:YYYY/";
Acquire::https::Proxy "http://XXX.XXX.XXX.XXX:YYYY/";
💡 viの使い方
-
i
で挿入モード - Escape -
:wq
で書き込んで終了 - Escape -
:q!
で保存しないで終了
(1-8) [Linux] パッケージの更新
Windows TerminalのUbuntuターミナルから実行
# パッケージリストの更新
sudo apt update
# パッケージのアップデート
sudo apt upgrade -y
# 上記で保留されたパッケージのアップデート
sudo apt dist-upgrade -y
# 不要になったパッケージの削除
sudo apt autoremove -y
(2) Pythonの導入
(2-1) [Linux] Pythonのインストール
Windows TerminalのUbuntuターミナルから実行する。
# python3をインストール(インストールされているはずだが念のため)
sudo apt install python3 -y
💡 Python3系ではpython3
を利用する。
(2-2) [Windows] Linux環境への拡張機能のインストール
WindowsのVSCodeでWSL2を開き、WSL2のLinux環境に以下の拡張機能をインストールします。(Linux環境ごとにインストールされます。)
- ms-python.python
- ms-python.vscode-pylance
- visualstudioexptteam.vscodeintellicode
(3) pyenvの導入
pyenv
でPythonバージョン(インタプリタ)の切り替えを行うことができます。
💡 Windows上に直接環境構築した場合は、Pythonインストール時にインタプリタ切り替えツール(py
)がインストールされています。しかしLinux環境には存在しないため、pyenv
をインストールする必要があります。
(3-1) [Linux] pyenvのインストール
pyenvのインストール。clone先は$HOME/.pyenv
がおすすめです。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
環境変数の設定
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
PATH挿入と自動補完の設定。 eval "$(pyenv init -)"
がきちんと.bashrcに記載されたか確認します。
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
再読み込み
source ~/.bashrc
💡 参考資料では.bash_profile
でしたが、今回のUbuntuでは~/.profile
が存在し~/.bashrc
を読み込んでいるため、~/.bashrc
に追記する形が適切です。(.bash_profile
に書き込むと.profile
を優先し、.bash_profile
に記載がないため~/.bashrc
を読み込まなくなります。)
Ubuntuでは、こちらに記載があるようにpyenv
動作のために必要なライブラリをインストールします。
sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
(3-2) [Linux] pyenvでインストール可能なインタプリタ
pyenvで利用可能なPythonバージョン一覧を確認します。
pyenv install --list
💡 バージョンが3.3でvenvが利用可能
(3-3) [Linux] pyenvでpythonをインストール
例としてPython3.6.12をインストール
pyenv install 3.6.12
インストールされているPython一覧を確認
pyenv versions
(3-4) [Linux] pyenvで複数のPythonバージョンを切り替え
以下は3.6.12に切り替えてから元に戻す例です。
インタプリタをPython3.6.12に切り替え
pyenv shell 3.6.12
現在のバージョンを確認する
pyenv version
バージョン3.6.12から元にもどす
pyenv shell system
(4) venv + pyenvで任意のバージョンの仮想環境を構築して開発
venv
+pyenv
を使って、任意のPythonの仮想環境(パッケージ環境)を構築して開発したいときは、以下の手順でインタプリタの切り替えと仮想環境の切り替えを行います。
-
pyenv
でインタプリタを切り替え - プロジェクトフォルダに移動
- 切り替えたインタプリタで
venv
を実行しプロジェクトごとの仮想環境を作成 - 仮想環境に入る
- ライブラリのインストール(
pip
)など - コーディング、実行
- 仮想環境を抜ける
以下はpyenvで3.6.12をインストールしていた場合のンタプリタの切り替えと仮想環境構築例です。
(4-1) WindowsフォルダをカレントとしてWSLリモート接続環境のVSCodeを起動
- Windowsのエクスプローラーでプロジェクトフォルダに移動
- アドレスバーに
wsl
を入力して実行し、プロジェクトフォルダに移動した状態でLinuxターミナルを開く - Linuxターミナルで
Code .
を入力して、WSLにリモート接続しLinuxにマウントされたプロジェクトフォルダをWindowsのVSCodeで開く
(4-2) インタプリタを切り替え
pyenv shell 3.6.12
(4-3) 仮想環境を構築
cd <プロジェクトフォルダ>
python -m venv .venv
💡 python3
では既定のPythonを参照するため、pyenv
で切り替えた場合はpython
を指定します。
💡 VSCodeは同じフォルダの仮想環境を自動認識して選択できます。プロジェクトフォルダごとに仮想環境を作成し、仮想環境名称は.venv
で統一することをお勧めします。
💡 Windowsのフォルダ(/mnt/c
など)で仮想環境を作成するとエラーとなる場合は、Windowsフォルダのマウントが正しく行われていないことがあります。Linuxにて以下のコマンドを実行してマウントを再作成することで解決することがあります。
cd ~
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata
(4-4) 仮想環境に入る
Linux ターミナル
cd <プロジェクトフォルダ>
source .venv/bin/activate
Windows VSCode
左下から作成した仮想環境を選択します。
仮想環境内のPythonのバージョン確認
python -version
(4-5) 仮想環境に必要なモジュールのインストール
仮想環境に切り替えられていることを確認し、必要なモジュールをインストール
# まとめてインストールするためのモジュール
pip install wheel
# requirements.txtからインストールする場合の例
pip install -r requirements.txt
💡 事前にpip install wheel
を行うことでインストール時の警告が抑制されます。
(4-6) Python 仮想環境を抜ける
deactivate
(5) Jupyter Notebookのインストール
Windows上にインストールしたPython環境ではPythonプラグインを使用することでVSCode上でJupyter Notebookを使用することができます。しかし2020年12月31日現在、Windows→WSL2では動作しなかったため、通常のJupyter Notebookを使用します。
# python仮想環境を起動
cd <プロジェクトフォルダ>
source .venv/bin/activate
# Jupyter Notebookをインストール
pip install wheel
pip install jupyter
# Jupyter Notebookを起動
jupyter notebook
💡 WSL上で起動したJupyter NotebookなどのWebサーバーには、http://localhost~
で接続できます。
(6) (PCではなく)WSL2のみを終了、再起動する方法
(6-1) 特定のマシンを停止
-
[Windows環境]
wsl -l -v
で確認NAME STATE VERSION * Ubuntu Running 2
-
[Windows環境]
wsl -t <NAME>
で停止💡 bashのヒストリーなどがクリアされるので注意
-
[Windows環境]
wsl -l -v
で確認💡 しばらく時間がかかる
NAME STATE VERSION * Ubuntu Running 2
(6-2) すべてのマシンをシャットダウン
- [Windows環境]
wsl --shutdown
ですべてのマシンをシャットダウン
(6-3) WSL2を再起動するには
再起動は特に明示的に指定する必要はなく、通常通りUbuntuを起動すればOK。
- Windows Terminalで新規のUbuntuタブを開く
- Ubuntu2004.exeを実行する(スタートメニューからUbuntu 20.04を選択する)
※本資料には未記載だが、Docker使用時はタスクバーのDockerアイコンを右クリックしてRestartで起動する。
参考資料
pyenv
でインタプリタ切り替えを行わず既定でインストールされたPython 3.8.5でvenvを使用する場合
参考:# pip3をインストール
sudo apt install pip3-y
# venvをインストール
sudo apt-get install python3-venv -y
# 仮想環境を作成
cd <プロジェクトフォルダ>
python3 -m venv .venv
Discussion