WSL2 の Python スクリプトを Windows 側の VSCode で開発する
まえがき
前回の記事で、Windows 10 Home に WSL2 + Ubuntu 20.04 の環境を構築しました。
もともとやりたかったのは、ここで Web サーバの開発をすることです。
サーバは Pipenv を使って Python で開発しています。
今回はそれを Windows 側の VSCode で開発する環境を整えてみます。
WSL2 Ubuntu 20.04 に Pyenv + Pipenv 環境を整える
Pyenv のインストール
WSL2 の Shell で以下を順番に入力します。
$ sudo apt install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc $ exec "$SHELL"
インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。
$ pyenv --version
Pipenv のインストール
まず最初に pip をインストールします。
sudo apt install python3-pip
次に pipenv をインストールします。
$ pip3 install --user pipenv $ echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc $ exec "$SHELL"
インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。
$ pipenv --version
Pipenv で新しいプロジェクトを作成する
開発を行うディレクトリに移動したら、使いたい Python のバージョンを決めて、
以下のようにプロジェクトを作成します。
$ pipenv --python 3.7.11
このバージョンが Ubuntu 内になければ、Pyenv を使用してインストールするかと聞かれるので
y にすれば勝手にインストールしてくれます。
VSCode でリモート開発のセットアップ
基本的にはここの手順に従います。
Remote Development Extension のインストール
VSCode の拡張パックで Remote Development をインストールします。
WSL2 のパッケージインストール
自分の環境では不要でしたが、参照サイトでは以下のコマンドを入れよと書いてありました。
$ sudo apt update $ sudo apt install wget ca-certificates
開発するディレクトリを VSCode で開く
WSL 側のシェルで以下のコマンドを叩くと、最初に VSCode Server が自動的にインストールされます。
その後、このディレクトリを VSCode で開いてくれます。
$ code .
Python Extension を WSL 側にインストールする
Windows 側にはすでに Python Extension がインストールされています。
しかし WSL 側にもインストールする必要があります。
そのため Python Extension を探します。
Install in WSL をクリックしてインストールします。
Python Interpreter を選択する
Python Interpreter として、さきほど Pipenv でインストールした Python を選択します。
VSCode の左下をクリックするとリストが出てくるので、それらしきものを選択します。
Windows 10 Home に WSL2 を入れる
まえがき
今開発しているのは Ubuntu をローカル Web サーバにした機械学習系のプロダクト。
クラウド Web サーバであれば AWS などを使うのでしょうが、ローカルネットワーク内でのみ使用する Web サーバなので、
サーバもローカルで外のネットワークに出ません。
つまりリモートアクセスができないのです。
昨今の流行りに乗って、週に何日かリモートワークをしていますが、開発サーバに外からアクセスできません。
またリモート時に持って帰るわけにもいきません。
仕方ないのでリモート用の Windows 10 Home に WSL2 を入れることにしました。
WSL2 のインストール
手順はこちらに書いてあるとおりです。
Windows のバージョンを確認する
Windows のバージョンが 2004 以上 (Build 19041 以上) であることを確認します。
Windows の設定 -> システム -> 詳細情報から確認できます。
管理者で PowerShell を起動する
Windows キー + X を押した後 A キーをタイプすれば OK。
所望のバージョンをインストールする
今回は Ubuntu 20.04 をインストールしたいので、PowerShell で以下のコマンドを入力します。
wsl --install -d Ubuntu-20.04
このあと再起動を求められることもあります。
その後ユーザ ID とパスワードを決めて、インストール完了です。
すごく簡単。
初期設定
初期設定の Best Practices は以下を見よとのことです。
とりあえずはパッケージのアップグレードだけしておきました。
$ sudo apt update && sudo apt upgrade
あと、WSL2 のファイルを Explorer で操作できるのは便利。
$ explorer.exe .
Ubuntu から QNAP NAS にバックアップを取る
まえがき
バックアップ用に QNAP NAS TS-431Kを調達しました。
QNAP(キューナップ) TS-431K 専用OS QTS搭載 クアッドコア1.7GHz CPU 1GBメモリ 4ベイ ホーム&SOHO向け スナップショット機能対応 NAS 2年保証
- 発売日: 2020/05/29
- メディア: Personal Computers
ここに、仕事用の様々な PC からバックアップを取ることにします。
Windows からは、QNAP 純正ユーティリティの NetBak Replicator が使えるので、それを使いました。
ただこのツールは Windows 専用。
Ubuntu 用には QSync というツールがありますが、これは Google Drive みたいな感じで、QNAP の特定ディレクトリをマウントするユーティリティのようです。
なので、これを使ってマウントしたうえで、rsync でバックアップを取ることにしました。
QNAP に Qsync Central を設定する
基本的には以下のドキュメントに書いてあるとおりです。
まず最初に QNAP の GUI から App Center を開きます。
そこで Qsync Central を検索してインストールします。
次にメインメニュー -> アプリケーションから Qsync Central を開きます。
共有フォルダーを開き、バックアップ先にしたいディレクトリに権限付与を設定します。
これで QNAP 側の設定は OK です。
Ubuntu に Qsync Client を設定する
Ubuntu で QNAP ユーティリティのページにアクセスし、Qsync の Ubuntu 用パッケージをダウンロードします。
ターミナルを開き、ダウンロード先のディレクトリに移動します。
そこで以下のコマンドを叩きます。
$ sudo dpkg -i <download_file.deb>
インストールすると再起動せよと出るので、指示通りに再起動します。
すると起動後に Qsync Client が自動的に起動されます。
そこで QNAP 側のアドレスや ID を設定し、同期用のディレクトリを指定すれば完了です。
Ubuntu で rsync によるバックアップを行う
まずは rsync をインストールします。
$ sudo apt update $ sudo apt -y install rsync
次に rsync コマンドを発行します。
$ sudo rsync -auv --delete --progress src_path dest_path
src_path はバックアップしたいディレクトリ、dest_path は、さきほど設定した同期用のディレクトリです。
これで、バックアップが行われるようになります。
定期的に実行されるようにする
cron を使えば、定期的にバックアップを実行できます。
私の場合はいくつかのディレクトリをバックアップしたいので、簡単なシェルスクリプトを作って実行させるようにしました。
こんな感じです。
#!/bin/bash echo 'password' | sudo -S rsync -auv --delete --progress src_path1 dest_path1 echo 'password' | sudo -S rsync -auv --delete --progress src_path1 dest_path1
password は sudo 用のパスワードです。
これをすることで sudo が自動的に実行されるようにしました。
最後に cron への設定です。
$ sudo crontab -e
0 3 * * * bash /home/user/backup.sh
これで毎日3時に、バックアップ用のスクリプトが実行されるようになりました。