先日まではPythonの実行ファイル化やWSL(Windows Subsystem for Linux)の実行ファイルをWindows側で実行するなどを行っていましたが、今回は少し目線を変えて、WSL上でWindowsのプログラムを動かしたりURLを与えるとブラウザを開いたり、パスの表記方法をかえるなどといった事のできるツールを紹介したいと思います。
参照
そのツールの名前はwslu
。こうした環境間の橋渡しを簡素化する便利なツール群となっています。
少し前からPythonのコードをWindowsで動作する実行ファイル化するという内容の内容を書いていました。WSLでは結構簡単にEXE化出来ていたにも関わらず、WindowsのNativeな実行ファイルを作成しょうとするとPythonのインストールに気をつけたり、C++のコンパイラが別途必要だったりと準備が大変でした。
【参考】
折角ならWSLで作成できた実行ファイル(ELFバイナリ)をWindowsでそのまま動作できたらいいのになと思っていたのですが、実は既に知っているものでした。そう、wsl.exe
でした。あー忘れてました🙄
wslコマンドを使えば、WindowsからWSL内の実行ファイルを直接実行することができます。基本的な構文は以下のようになります:
PS> wsl -d ディストリビューション名 実行ファイルのパス
例えば、WSLのUbuntuディストリビューションがMyUbuntu
で/home/username/myapp
という実行ファイルがある場合には、WindowsのコマンドプロンプトやPowerShellから以下のように実行できます。
PS> wsl -d Ubuntu /home/username/myapp
私の環境で試してみました。まず、WSL内でPythonスクリプトをNuitka
でEXE化(実際にはELFバイナリ)したファイルがありそれを実行する場合には以下のようになります。
# WSL内での作業(ユーザ名は`uesr2404`) $ cd /home/user2404/nuitka $ nuitka --onefile hello.py
これでカレントディレクトリにhello.bin
という実行ファイルができます。このファイルをWindowsから実行するには以下の様にします。
# PowerShellから実行 PS> wsl -d MyUbuntu /home/user2404/nuitka/hello.bin
ディストリビューションの指定をしないとエラーが発生します。また、実行するユーザ名はデフォルトユーザ名になります。もしユーザ名を変更する場合には-u
を使用してユーザ指定を行います。
# ユーザ名を指定してPowerShellから実行(今回はroot) PS> wsl -d MyUbuntu -u root /home/user2404/nuitka/hello.bin
実行ファイルに引数を渡したい場合は以下のように行います。プログラムを起動させる通りにコマンドラインを記述すればよいのですが、ファイルのパスはWindowsが認識できる形式である必要があります。プログラムの起動はLinux側のパスを使用するのに、引数で指定のファイル名はWindows形式というのがわかりにくくなっているかもしれません。
PS> wsl -d Ubuntu /home/username/dist/myscript.bin file.txt
頻繁に使う実行ファイルの場合、Windowsのショートカットを作成すると便利です。
【デスクトップで右クリック】→ 【新規作成】→【ショートカット】
【項目の場所を入力してください】にPowerShellのプロンプトで実行するように入力して、【次へ】ボタンをクリックします。
wsl -d Ubuntu /home/username/dist/myscript
【ショートカット名】を設定して【完了】ボタンをクリック
作成されたショートカット
ショートカットからの実行
より柔軟に使いたい場合は、バッチファイル(.bat
)やPowerShellスクリプト(.ps1
)を作成することもできます。
【バッチファイルの例】run_myapp.bat
@echo off wsl -d MyUbuntu -u root /home/user2404/nuitka/hello.bin
引数を持つプログラムでは下記のようにします。%*
により、バッチファイルに渡された引数がそのまま実行ファイルに転送されます。
wsl -d Ubuntu /home/username/dist/myscript %*
WSL内のファイルパスは絶対パスで指定するのが確実です。相対パスを使う場合は、WSL内でのカレントディレクトリに注意が必要です。
WSLの実行ファイルからWindowsのファイルにアクセスする場合、/mnt/c/
のようなマウントパスを使用する必要があります。
PS> wsl -d Ubuntu /home/username/dist/myscript /mnt/c/Users/username/data.txt
WSL内で特定の環境変数が必要な場合は、実行前に設定するか、wslコマンドで直接指定できます。
PS> wsl -d Ubuntu -e PYTHONPATH=/custom/path /home/username/dist/myscript
すっかり忘れていましたが、wslコマンドを使えばWSLで作成した実行ファイルをWindowsから簡単に実行できます。これで、わざわざWindows用にビルドし直す必要もなく、WSLの軽量で快適な開発環境をそのまま活用できるのが大きな利点です。ただ、WSLの中のバイナリを動作させるので初回起動ではちょっと時間がかかってしまうのが難点でしょうか。
【2025.06.20 追記】Windows版のNuitkaでrequestsライブラリが動作しないと記載していましたが、Store版Python3.10にバージョンダウンしたところ無事に動作を確認しました。
先日は、WSL環境でNuitkaでの実行ファイルの作成にチャレンジしました。ただ、作成されたファイルは、そのままではWindows上で実行は出来ない状態でした。そこで今回は、Windowsネイティブ環境でNuitkaを使用した実行ファイル作成についても実験してみます。 これにより、WSL環境とWindowsネイティブ環境の両方で実行ファイルを作成できるようになり、比較的多くの環境で使用できる配布物を作成することが可能になります。
今回はPowerShellを主要なコマンドラインツールとし、Nuitkaの処理をWindowsネイティブ環境で活用するための手順、ベストプラクティス、そして実際に遭遇したトラブルとその解決策を記録していきます。
【参考】WSLでのNuitkaを使用した実行ファイルの作成
基本的には上記の記事をベースにしているので、細かい部分はこちらを参照してください。
続きを読む先日、窓の杜でMicrosoft、Rust製軽量テキストエディター「Edit」を発表という記事が話題になっていました。
日本語ユーザーに嬉しいアップデート
最新のv1.2.0では、エンコードピッカーが改善!これまでShift-JISを指定するにはibm-943_P15A-2003
という複雑な名前を選ぶ必要がありましたが、今では検索ボックスでShift-JISと入力するだけです。またAmbiguous = Wide
対応で、日中韓文字の表示崩れも解消されています。
この記事を見て自分もちょっと使ってみたいなと思いインストールをしてみました。
続きを読む