1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

py2exeを利用しようとして挫折した備忘録

Posted at

#概要
pythonのsimplekmlを利用して、csvからkmlファイルを作成するソフトを作成して、それをC#から呼ぶ形のソフトを作成しようとした。
C#からpythonを呼ぶ方法として
.NET (C#)からpythonを呼び出す
などもあるが、実行形式で出力して、引数を付けて呼ぶ方がとりあえず楽だと思ってその方向で進めることにした。

##結論
py2exeは軽量化しつつexe化できる可能性があるが、処理が煩雑になるので利用しないこととした。
仮想環境でpyinstallerを利用するか、pythonnetを利用する方が良い

#pyinstaller
実行形式で出力する方法としては

  • pyinstaleller
  • py2exe

があるが、とっつきやすそうなpyinstallerから手を付けることにした。

python
pip install pyinstaller
python -m pyinstaller test.py --onefile

これだけで実行形式で出力できるので、非常に楽なのだが、めちゃくちゃファイルサイズがでかくなって30MBになってしまった。
仮想環境とか作ればもっと軽くなるらしいが、あんまり時間もかけたくないので、後回しにする。

pyinstallerについて詳しく知りたい場合は
【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
ここを参照する事を推奨する。

#py2exe
py2exeならそこまで重くならないような噂だったので、そちらに手を付けることにする
インストールについてはgitからwhlをダウンロードする方法しかないようなので、サクッとインストールする
py2exeをpython 3.5 - 3.7で使う
https://github.com/albertosottile/py2exe/releases

setup.pyを書く必要があると言うのでそこらへんも作成する
py2exeでPythonのスクリプトを実行ファイル(exe)にする【py2exe】

python setup.py py2exeで実行する

ここらへんからハマり始めるのだが
'bundle_files': 2,
だと出力できるのだが
'bundle_files': 1,
にするとnumpyのサブモジュールが見つからないとか言って出力できない。
じゃあなんで2だと通るんだよ、って話なんだが、2で出力したファイルを実行してみると
SystemError: initialization of numpy.random.mtrand did not return an extension module
とかいってnumpy周りで失敗する。

これについて調べてみると
https://github.com/albertosottile/py2exe/issues/28
なんかライブラリをいじったり、インポート周りで変な回り道をする必要があるみたい
なのでpy2exeは利用しない方がいいだろうと判断した

#締め
まぁとりあえず2時間くらいで調べた内容を15分くらいでまとめたような薄い内容ですが、備忘録ですので、見づらかったらすいません。
とりあえず、現状でもモノは動くので、30MBのまま使ってみて、時間が余れば(余らない)ほかの方法も試してみようかと思います。

以上です。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?