windows上でのpythonの開発環境ってDockerで作るのがいいような気がします。 依存関係とか文字コードとかもろもろ面倒が少ないと思うんですよね。

pythonはGUIアプリも作れますが、Docker内でGUIするにはそれなりの準備が必要なようです。

VcXsrv

VcXsrvからインストーラーをダウンロードしてインストール。SourceForgeがむしろ新鮮。

全部defaultで「次へ」連打。

VcXsrv起動

スタートメニューのXLaunchで起動。

あとは全部defaultでOKっぽい。

Docker環境の準備

Ubuntuをベースにしてます。もっと軽いalpineとかでも行けそうですが試してません。

1
2
3
FROM ubuntu:latest
RUN apt-get update && apt-get install -y iputils-ping net-tools x11-apps
ENV DISPLAY host.docker.internal:0.0

3行目の“ENV DISPLAY host.docker.internal:0.0”が超大事です。 最初”DISPLAY=10.0.75.1:0.0”とかやってましたがダメでした。

docker-compose使わないと起動できない人なので書きます。

1
2
3
4
5
6
7
8
9
version: '3'
services:
  os:
    restart: always
    build: ./os
    working_dir: "/work"
    volumes:
      - ./:/work
    tty: true

実行

1
2
3
4
5
6
# ホストOS
$ docker-compose up -d
$ docker-compose exec os bash
# docker内
root@bbc8915b9611:/work# xeyes &
root@bbc8915b9611:/work# xcalc &

出た

pythonでGUIしてみる

1
2
3
4
5
6
root@a842a4ea73e9:/work# apt-get install -y python3 python3-pip
root@a842a4ea73e9:/work# apt-get install -y tk-dev
Geographic area: 6
Time zone: 79
Current default time zone: 'Asia/Tokyo'
root@a842a4ea73e9:/work# python3 -m tkinter

でた

WSL(Windows Subsystem Linux)は要らない。

VcXsrvさまさま。

同じPC内でやってる分にはファイアウォールの設定とかは要らない。

肝はhost.docker.internalを使うこと。

ソースはここです。