はむ吉(のんびり)の練習ノート

主にプログラミングについて、思いついたことや、試してみたこと、学んだことを、覚え書きを兼ねてまとめます。

Windows Subsystem for Linux 上に Python 3 開発環境を構築する:Debian GNU/Linux 環境の初期設定から Anaconda + Visual Studio Code の導入まで

Windows 10 に備わっている Windows Subsystem for Linux (WSL) を使うと,手軽に Linux 環境を実現できます.本記事では,WSL に基づき Linux 環境を構築し,これに Python 3 ディストリビューション Anaconda およびエディタ Visual Studio Code を導入し設定する一連の手順について述べます.

更新履歴

はじめに

少なくとも私にとって,Windows 上で開発環境を構築するのはなかなか骨の折れる作業です.その理由としては,以下のようなものが挙げられるでしょう.

  • 環境変数の設定や,処理系・ライブラリの導入に,GUI ベースのインストーラを用いた作業をいちいち強いられる*1
  • 複数の言語処理系や開発ツールを導入する場合,一部のツールが重複して導入される(例:MinGW
  • ライブラリの導入に,追加の手間がかかることがある(例:非 pure-Python パッケージ)

この問題を解決する一つの方法は,Linux 上に開発環境を構築することです.ただし,市販の PC の多くには Windows が導入されていることが多く,これを抹消せずに Linux を使用する場合には,デュアルブート環境の構築,あるいは仮想 PC アプリケーション(例:VirtualBox, VMWare)の利用が必要となります.ただし,前者はシステムに関するやや高度な知識,後者は高い PC のスペックを要するという難点があります.そのため,Linux 環境の利用も,なかなか難しいものでした.

ところが Windows 10 以後は,wikipedia:Windows Subsystem for Linux (WSL) という仕組みにより,Linux 環境を手軽に利用できるようになりました.少しの設定で Linux が動くようにできるだけではなく,動作の負荷も仮想 PC ほどではないという,画期的なものです.また,当初はディストリビューションとして Ubuntu のみが利用可能でしたが,今では Debian GNU/Linux や Kali Linux を含むいくつかのディストリビューションを使えるようになりました.

そこで,WSL を利用して,まずは Python 3 の開発ができる Linux 環境を構築することにしました.折しも Windows 10 Pro (バージョン 1803)の再インストール*2直後だったので,旧開発環境を含むアプリケーションが一掃されており,絶好の機会でした.以下では,その手順を整理したものを示します.なお,基本的な Linux コマンドの扱いなど,細かい部分については適宜省略しています.

Windows 10 側での準備作業

WSL を利用した Linux 環境を立ち上げるまでに,Windows 10 側でいくつかの作業を行っておく必要があります.

Chocolatey の導入:強力なパッケージマネージャ

近年,Windows 用のパッケージマネージャとして Chocolatey が登場しました.これにより,開発ツールを含む著名なアプリケーションの多くが,インストーラによる煩雑な作業を経ることなく導入可能になりました.以下の作業にも必要であるため,まずはこれを導入します.公式ページの指示に従い,Windows PowerShell またはコマンドプロンプト(いずれも管理者権限)から作業を行います.私は前者を用いました.

VcXsrv の導入:X11 アプリケーションの動作に向けて

wikipedia:X Window System (X11) に依存する,かなり大雑把に換言すれば GUI を使う Linux アプリケーションを動作させるための準備作業として,VcXsrv を導入します.これを怠ると,Visual Studio Code が正常に機能しません.上述の Chocolatey が正常に導入されていれば,Windows PowerShell またはコマンドプロンプト(いずれも管理者権限)で chocolatey install -y vcxsrv を実行することで VcXsrv を導入できます.

Windows Subsystem for Linux の有効化

WSL は既定で無効であるため,以下の手順により有効化する必要があります.これには「Windows の機能」画面を開きます.「スタート」を右クリックして,現れるメニューの「アプリと機能」をクリックし,表示される画面の最下部にある「プログラムと機能」をクリックし,さらに出てくる画面の左側にある「Windows の機能の有効化または無効化」をクリックすると,当該画面に到達できます*3

f:id:hamukichi_nbr:20180915154822p:plain
Windows の機能」画面.

この画面で「Windows Subsystem for Linux」を選択し,「OK」を押下後,指示に従い再起動すれば,WSL の有効化は完了です.なお,以前のバージョンでは「開発者モード」への切り替えが必要でしたが,最新の Windows 10 では非必須のようです.

Linux ディストリビューションの導入

前節の作業により WSL が有効化されたので,以下のように MIcrosoft Store から Linux ディストリビューションを取得・導入します.スタートメニューから「Microsoft Store」を開き,当該画面の検索欄に「Linux」と入力すると,「WindowsLinux を実行する」と表示されるので,これをクリックします.

f:id:hamukichi_nbr:20180915155449p:plain
Microsoft Store」画面で「Linux」と検索したところ.

すると,以下のようにディストリビューションを選択する画面に移行します.私は標記のように,Debian GNU/Linux を選択しました.

f:id:hamukichi_nbr:20180915155950p:plain
Microsoft Store から取得できるさまざまな Linux ディストリビューション

Linux 環境の初期設定

開発ツールの導入にとりかかる前に,以下のように Linux 環境の初期設定を行います.

アカウントの設定

スタートメニューからはじめて Linux ディストリビューション(今回は Debian GNU/Linux)を選択すると,CUI の画面が表示され,しばらく待たされた後アカウントの設定を求められます.画面でも説明されますが,このアカウント名とパスワードは Windows のものと同一である必要はありません.後の作業で使うので,忘れないようにしましょう.

f:id:hamukichi_nbr:20180915160653p:plain
Debian GNU/Linux を最初に起動したときの画面.

CUI で利用するエディタの導入

以下の作業では設定ファイルの編集を行いますが,これにはエディタが必要です.そこで,CUI で使える適当なエディタを(Visual Studio Codeとは別に)導入しておきます.私は sudo apt-get install emacsEmacs を導入しました.

X11 を利用するための設定

先に導入した VcXsrv を,Linux 側から利用できるようにし,その動作を確認します.以下では,あらかじめ VcXsrv を起動させて操作を行います.まずは,Linux 上で ~/.bashrcexport DISPLAY=localhost:0.0 という一行を追記し,シェルを再起動します.すなわち,exit を入力して Linux を終了させたうえで,起動しなおします.その後,動作確認用に,sudo apt-get install x11-apps により X11 で動くアプリケーションを導入します.コマンド xcalcxeyes を実行し,電卓や目玉がそれぞれ出ることを確認します.その後,sudo apt-get install bzip2 dbus-x11 により*4,Anaconda と Visual Studio Code の導入に必要なツールを導入します.

Anaconda と Visual Studio Code の導入

Anaconda と Visual Studio Code は連携しているようで,前者の導入を終えると後者についても尋ねられるという便利な仕組みになっています.そこで,Anaconda の導入から始めることにします.

まずは,以下の Anaconda 公式サイトのダウンロードページにアクセスします.「Linux」を選択すると,以下のように LinuxPython 3.6 環境を導入するためのボタンが現れます.これはインストール用のシェルスクリプトにリンクしています.そのシェルスクリプトがある URL を Linuxwget に処理させ,Linux 環境にダウンロードします.ファイルサイズが数百メガバイトあることに注意してください.

f:id:hamukichi_nbr:20180915165517p:plain
Anaconda 公式サイトから Linux 用インストールスクリプトを取得する.

Linux 側でシェルスクリプトを取得できたら,これを実行することで Anaconda の導入が始まります.この場合,sudo の付加は必要ありません.途中,Anaconda のパスを PATH に含めるかを尋ねられました.ほかの仮想環境等を利用する予定がないので,ここでは yes としました.続いて,Visual Studio Code の導入が促されるので,指示に従います.

f:id:hamukichi_nbr:20180915224407p:plain
Linux 環境上で Visual Studio Code が動作している様子.Python の Lint 等も容易に有効化できる.

Python 3 互換の PyPy 処理系の導入

(2018 年 9 月 17 日に追記)

上記の操作により,Python 3 の最も一般的な処理系である CPython が導入されますが,ほかの処理系も使用したい場合もあります.たとえば,PyPy は CPython との高い互換性を持ちながら,より高速である処理系です*5.ここでは,その導入方法について述べます.

Anaconda にはパッケージマネージャの機能が備わっており,これを利用すると Python 3 互換の PyPy を容易に導入できます.そのためには,シェルで conda install -c conda-forge pypy3.5 を実行します.しばらく待つと,pypy3 として PyPy を起動できるようになります.

なお,sudo apt-get install pypy で導入される PyPy は Python 2 互換であり,今回の目的である Python 3 互換のものではないことに注意してください.

Linux 環境と Visual Studio Code の日本語化

(2018 年 9 月 17 日に追記)

ここまでの操作により Python 3 の開発ができる Linux 環境を構築できましたが,シェルや Visual Studio Code などの表示が英語のままです.そこで,以下の手順により,環境の日本語化を行います.

Linux 環境の日本語化

これについては,以下の記事にて詳述しています.
hamukichi.hatenablog.jp

Visual Studio Code の日本語化

Linux 環境を日本語化するだけでは,Visual Studio Code の表示が日本語化されない場合があります.その場合には,以下のように日本語化のための設定を行います(参考:VisualStudioCodeの日本語化).適当なディレクトリで Visual Studio Code を実行し,Ctrl + Shift + P でコマンドパレットを開き,"Configure Display Language" をタイプします,表示される locale.json において,"locale" 欄を "ja" に設定して保存します.そして,Ctrl + Shift + X で拡張機能の画面を開き,以下のように,日本語の言語パックをインストールします.その後,指示に従い Visual Studio Code を再起動すると,日本語化されているはずです.

f:id:hamukichi_nbr:20180916222321p:plain
Visual Studio Code に日本語の言語パックを導入する様子.

まとめ

上述のように,WSL を利用して Linux 環境に Python 3 の開発に必要なツールを導入できました.Python 3 がらみの作業は少なく,むしろそれ以前に手間がかかる印象でした.このように環境を構築しておけば,C/C++ など言語の追加は容易だと思われます.

関連記事

以前,WSL 上で C/C++ 開発環境を構築したときの記事です.ここではディストリビューションとして Ubuntu を,エディタとして Emacs を用いました.今回の作業でも,この記事を参照しました.

hamukichi.hatenablog.jp

*1:ただし,この問題点はサードパーティ環境変数設定アプリケーションや,パッケージマネージャ Chocolatey の登場などにより緩和されています.

*2:「新たに開始」を利用.

*3:こう書くだけで気が遠くなります.おそらく一発で表示するすべはあるのでしょうが,調べる気になりません.

*4:これで十分とは限りません.適宜,以下の手順で生じる警告やエラーメッセージを参照し,追加のパッケージを導入してください.

*5:競技プログラミングでは,CPython で実行時間制限を超える場合,PyPy に処理系を変更して再試行することがよくあります.