かーくがかーくよ

色々書くよ プログラミングとか漫画とかゲームとかが主

Python2系メインで使っている社内PCにXonshを導入してみた

はじめに

この記事はXonsh Advent Calendar 2017 8日目の記事です。

社内PCにxonshを導入してみた話を書きます。

環境

おっと、体調が少し悪くなってきました。

導入手順

Python3インストール

導入しようとしてびっくりしたんですがそもそもPython3入ってなかったですね。

  1. 普通にDLしてきて、C:\Python36-32\あたりにインストール

  2. C:\Python36-32\python.exeC:\Python36-32\python3.exeにリネーム

  3. C:\Python36-32にPathを通す

これでとりあえずpython3コマンドが通るようになります。

これだとpipコマンドが使えないんですが、メインで使うのは今後もしばらく2系になりそうなのでとりあえずこういう感じにしておきます。

pipでxonshインストール

基本的な手順はここに書いてあるとおり。

$ python3 -m pip install xonsh
$ python3 -m pip install prompt-toolkit

win_unicode_consoleもインストールしたほうがよさそうなこと書いてありますが、Cygwinで実行するぶんには特に必要なさそうな感じです。

ConEmuのタスクに登録

f:id:kirk3110:20171204151102p:plain

set CHERE_INVOKING=1 & %ConEmuDrive%\cygwin64\bin\bash.exe --login -i -new_console:C:${アイコンのパス} -c python3 -m xonsh

こんな感じで登録しておくと、ConEmuのタスクからXonshを選択して起動できます。

f:id:kirk3110:20171207201118p:plain

.xonshrcを作成

import _locale
_locale._getdefaultlocale = (lambda *args: ['ja_JP', 'utf_8'])

とりあえずこれを追加しておかないと、Tabキーで補完しようとするたびにErrorを吐かれてしまいます。(参考:xonshのタブ補完でなんかエラーになる件 - Qiita

あとは.bashrcと同様に何かしら登録しておくとよさそう。Pythonで書けるみたいで便利ですね。

やっていき

とりあえず思いついたことをやっていきます。

材料

何をしたいのか

  • train_script_py2.pyの学習時に与える最適なパラメータを考えたいので、とりあえず何パターンか試してみたい。
  • 結果をCSVに出力したい。
  • そのためにまたPython2系のスクリプトを増やしたくない。
    • 大人の事情などがありscipyのバージョンを軽率に上げられないため(????)、最新のpandasやscikit-learnが使えず残念な感じという問題もある。

動かしてみた

$ import pandas as pd
$ from sklearn.metrics import accuracy_score
$ params = pd.read_csv('params.csv')  # vecsize, threshold, window
$ scores = []
$ for i, (v, t, w) in params.iterrows():
      python train_script_py2.py -i 'train_dataset.csv' -o 'tmp.model' \
          --vecsize @(v) --threshold @(t) --window @(w) 
      pred = [int(cls) for cls in $(python pred_script_py2.py \
              -m @(model_path) -i 'test_dataset.csv').split('\n') if cls]
      scores.append(accuracy_score([0,1,2,3,4,5,6,7,8,9], pred))
$ params[score] = scores
$ params.to_csv('result.csv', index=False)

動いた

動いたから何だという感じもあります。

所感

  • ちょっとしたファイル操作等をするときにPythonも一緒に使えるbashだと思うとまあ結構アリかもしれない。
  • しかし上でやってみたぐらいのことをやるならPython2でも良い気はします。
  • シェル芸力が足りないのであんまり気の利いたことができなかったです。
  • 様々な事情がありJavaのモジュールを使用することを余儀なくされたりなどするため、そういったときには便利なのかもしれません。
  • SVN(Gitではない)のコマンドライン操作を絡めてモニョモニョできたりすると楽しいかもしれません。
  • はやく3系*1になりたい

*1:にんげん