Differences between revisions 3 and 6 (spanning 3 versions)
Revision 3 as of 2020-03-20 19:28:54
Size: 998
Comment:
Revision 6 as of 2020-03-21 11:04:21
Size: 1472
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
[[https://se.miyabikno-jobs.com/cython-compile-cythonize/|簡単なコンパイル]] Cythonについて調べると、setup.py なるファイルを作れという記事が多くヒットするが、現代ではこれは必要なくなった。([[https://se.miyabikno-jobs.com/cython-compile-cythonize/|ここ]]を参照)
Line 8: Line 8:
=== Cythonのコンパイル->実行を一発でできるようにする === === Cythonのコンパイル -> 実行を一発でできるようにする ===
Line 11: Line 11:
home directoryに ''.cython.sh'' という名前で以下を書き込んだシェルスクリプトを作る。 home directoryに ''.cython.sh'' という名前で以下を書き込んだシェルスクリプトを作る。 
Line 14: Line 14:
set -e
trap 'echo compile error' ERR
Line 15: Line 17:
cythonize -a -i $code > .cython_log.txt cythonize -i $code > .cython_log.txt
rm ${code%.pyx}.c
Line 24: Line 27:
これで ''~/.bashrc'' を有効にすれば、ターミナルで これで ''.bashrc'' を有効にすれば、ターミナルで
Line 29: Line 32:

2, 3行目は、コンパイルに失敗した時にスクリプトが止まるようにするおまじない。

6行目は .c ファイルを残さないようにしている。

9行目の末尾の "${@:2}" は、引数をpythonに渡すおまじない。

高速化の小技

Cython

Cythonについて調べると、setup.py なるファイルを作れという記事が多くヒットするが、現代ではこれは必要なくなった。(ここを参照)

Cythonのコンパイル -> 実行を一発でできるようにする

Cythonを使って高速化したはいいけど、毎回コンパイルするのは面倒だ。複数のコードになってしまうのは嫌だ。という場合の小技。

home directoryに .cython.sh という名前で以下を書き込んだシェルスクリプトを作る。

   1 #!/usr/bin/bash
   2 set -e
   3 trap 'echo compile error' ERR
   4 code=$1
   5 cythonize -i $code > .cython_log.txt
   6 rm ${code%.pyx}.c
   7 echo 'import '${code%.pyx}  > .a.py
   8 echo ${code%.pyx}'.main()' >> .a.py
   9 python .a.py "${@:2}"

また、 ~/.bashrc に次の一行を書き足す。

   1 alias cythonsh='sh ~/.cython.sh'

これで .bashrc を有効にすれば、ターミナルで

> cythonsh (cythonコード).pyx 引数

と打つだけでコンパイルから実行まで行われる。

2, 3行目は、コンパイルに失敗した時にスクリプトが止まるようにするおまじない。

6行目は .c ファイルを残さないようにしている。

9行目の末尾の "${@:2}" は、引数をpythonに渡すおまじない。

KAGRA/Subgroups/PEM/PythonMemoJP/speedup (last edited 2021-08-04 18:33:51 by tatsuki.washimi)