uni farm

google colaboratoryで引数を指定して.pyファイルを実行

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に記述して実行

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
...
2022, Built with Gatsby. This site uses Google Analytics.