2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonをexe化するDockerImageを使うときにwsl実行がうまくいかなかったので対処した

Last updated at Posted at 2023-02-08

背景

Pythonをexe化する方法としては「Pylnstaller」や「nuitka」があるもよう。
ひとまずこの記事をみながらPythonをexe化してみた。
https://qiita.com/ryoheiszk/items/2ea26594d24304c721e2
そしたらこのようなエラーが発生。

もしかしてwslでDockerは使えないのかと思い、以下コマンド
wsl dockerを実行してみたところ、案の定できないと言われた。

The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

For details about using Docker Desktop with WSL 2, visit:

https://docs.docker.com/go/wsl2/

手順を見ると、なにやらUbuntuを入れてDockerDesktopと連携させるひつようがありそう・・・。

ということなので、はじめてやってみる方向けに手順を整理してみました。

手順

1.コマンドプロンプトを開く

Win+Rでファイル名を指定して実行を開き、cmdと入力

2.Ubuntuをインストール

コマンドプロンプトで以下入力。
wsl --install -d Ubuntu-20.04

image.png

以下のように「Ubuntu 20.04 LTS はインストールされました。」が表示されたら完了。
image.png

自動的にLTSが起動され「Enter new UNIX username:」と指示されるが、無視してOKです。
image.png

3.既定のLinuxディストリビューションを設定

wslコマンドでデフォルト起動するディストリビューションを設定。
現在のディストリビューション一覧は以下コマンドで確認。
wsl -l -v
image.png

「docker-desktop」に*マークがついているため、Ubuntu-20.04をデフォルトに変更する。以下のコマンドで可能。
wsl -s Ubuntu-20.04

一覧を確認して変更されているかどうか確認するとよい。

4.DockerDesktopでWSL2を使う設定に変更

DockerDesktopで設定画面を開きGeneralへ。
「Use the WSL 2 based engine」にチェックボックスが入っていなかったらチェックをいれてApply&restart

image.png

次にResouresへ。
「Enable integration with my default WSL distro」にチェックボックスが入っていなかったらチェックをいれる。
そして先ほどインストールしたUbuntuを統合させるため、「Ubuntu-20.04」をONに。
その後同じくApply&restartをして完了。
image.png

5.wslでdockerが実行できるか確認

冒頭で実行できなかったwsl dockerコマンドを実行。
その結果、以下のようにDockerの使い方説明が出てきたら成功。

image.png

Pythonのexe化

冒頭にご紹介したQiitaの記事をそのまま参考にしています。

▼ディレクトリ構成

.
├── main.py
└── requirements.txt

コマンドプロンプトを開き上記ディレクトリに移動。
その後以下コードをワンライナーで実行。

wsl docker run --rm -v "$(pwd):/src/" cdrx/pyinstaller-windows -c \
  "pip install -r requirements.txt && \
  pyinstaller main.py --onedir --onefile --clean && \
  mv dist/main.exe main.exe && \
  rm -rf __pycache__/ build/ dist/ main.spec"

元記事で引っ掛かった点としては、「WSLで実行」部分がうまく理解できていなかったため手こずりました。
コードの冒頭でwslをつけた状態で実行するとうまくdocker runしてくれます。

これで気軽なexe化ライフを過ごせそうです・・・!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?