google colaboratoryで.pyファイルに引数を指定して実行したかったのでやってみた
引数を含んだ.pyファイルを実行する
引数なしで.pyファイルの 実行する場合は
execfile('main.py')
とすれば実行できる
しかし、機械学習用の実行スクリプトはハイパーパラメータなどを引数で受け取ることが多く、引数を渡したりしたい
(
subprocess
実行ファイル
以下の.py, .shファイルでテストする
input_parse.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input', dest='input_arg', help='input from arg')
args = parser.parse_args()
def main():
print('input_arg', args.input_arg)
if __name__ == '__main__':
main()
run.sh
#!/bin/sh
python input_parse.py -i input_from_sh
実行コマンドを.sh
に記述して実行
.sh
driveフォルダにgoogle driveのフォルダをマウントした状態で
# 実行フォルダの変更
import os
os.chdir('drive/My Drive/Colab Notebooks/')
!ls
.. input_parse.py run.sh
!sh run.sh
input_arg input_from_sh
引数を受け取っている
ただし、スクリプトを編集したい時はローカルで編集して、アップロードかマウントし直さなければならないのが少し面倒
しかし、 https://stackoverflow.com/questions/48687091/how-to-edit-and-save-text-files-py-in-google-colab によると
%%writefile run.sh
#!/bin/sh
python input_parse.py -i input_from_sh
---
Overwriting run.sh
などとして実行するとファイルをその場で上書きすることができる
.pyファイルをコマンドで実行
%run -i input_parse.py -i aaa
input_arg aaa
(おまけ)古いバージョンのライブラリを動かす
おまけというかついでにメモしておく
古いコードを動かしたい時、colaboratoryにデフォルトで入っている 新しいバージョンのパッケージではなく、任意のバージョンのパッケージを使用したい時がある
単純にバージョン指定してinstallすれば良い
!pip list
...
Keras 2.1.6
...
!pip install keras==1.2.1
Collecting keras==1.2.1
Downloading https://files.pythonhosted.org/packages/96/62/f6c6c16e81b11a06698db58724ecbb2cf924ca1f646705850d68ecbb09b1/Keras-1.2.1.tar.gz (173kB)
100% |████████████████████████████████| 174kB 4.4MB/s
!pip list
...
Keras 1.2.1
...