wide and deep

WindowsからWSL内のPython仮想環境にスクリプトを実行させる

今回したこと

タイトルの通り,WindowsからWSL内のPython仮想環境にスクリプトを実行させました.
この記事に需要があるかどうかは謎ですが,WSLで環境を作成し,Windowsからその環境でスクリプトを実行したいようなときに役立つと思います.

test.py(py37)からevaluate.py(py27)を呼び出したいような状況が発生したので調べました.

Windows{ Python3.7 }   --->  WSL{ venv{ Python2.7 } }
           └ test.py                       └ evaluate.py

答え

wsl のあとに引数としてwslで動かしたいコマンドを打てばいいみたい.

> wsl { Python仮想環境の絶対パス } { スクリプトの絶対パス }

今回はPythonスクリプトからWSL環境で別スクリプトを起動したかったので,
諸々をバッチ化してからそれを呼び出すようにしました.
各パスは変更するの面倒なのでそのまま貼ります.
環境はvenvで作成したものです.

@echo off
set root_path=/mnt/c/Users/Milano/Desktop/wind-turbine_design_optimization
set python_path=%root_path%/EC2019/jpnsecCompetition2019/bin/python
set eval_script=%root_path%/evaluation/windturbine_SOP.py

wsl %python_path% %eval_script%

関係ないですけど.batのシンタックスハイライトは dosbatch なんですね
上記バッチ(evaluation.bat)をPythonスクリプト内から呼び出す.

import os
os.system('evaluation.bat')

終わりに

あまり役立つ機会があるとは思えないですが,
例えば下記のようなコンペに参加するときなどに覚えておくと幸せになるかもしれないです.
評価モジュールががWSL上Python2.7系なので
www.jpnsec.org

自分が取り組んだコード
コンペ自体はまだ開催中ですが,提出する気はないので貼っておきます.
github.com