(python番外編)pyinstallerで複数ファイルを実行ファイルにする
pythonのスクリプトはインタプリターのようですが、これを実行ファイルとしてまとめてくれるライブラリがいつくか出ているようです。そのうちの代表的なものがpyinstallerになります。
pyinstallerが動かない(典型例)
pyinstallerが動かないとされる代表的な例としてはseleniumuなどで使用するドライバーが取り込まれないというものがあげられます。その場合はバイナリーファイルを以下のように指定すれば問題なく導入されるようです。
pyinstaller xxxx.py --onefile --noconsole --add-binary "./driver/chromedr
iver.exe;./driver"
ただし、この場合はドライバーの指定も原則相対位置で示しますが、--onefileとして一つのファイルにまとめる場合のソース記述についてはここに解説があります。
ちなみにこの外部記事では書かれていませんが、import osというライブラリのインポートも必要になりますので注意してください。また__file__という記述は有効でないという話もあり、最終的になにが正解かは今一つわかっていません。
pyinstallerが動かない(実行時にFatal error)
Webドライバーの指定についてはある程度記事にありますが、自分は全く動作せずFatal errorに困っていました。しかし試行錯誤のあげく、--onefileを指定せずに生成した実行ファイルが格納されたディレクトリに、pyinstallerで指定した*.pyファイル以外の*.pyファイルの名前らしきものがどこにもないことに気が付きました。
そこで指定以外の*.pyファイルを当該ディレクトリに格納したところ、なんと動いてしまいました。
そこからいろいろ調べていくと、pyinstallerの引数に複数の*.pyファイルが書かれているものを見つけました。
そこで、自分が作った*.pyファイルを引数として並べてみると・・・・なんと実行できました。
どうやらPyinstallerで作成した実行ファイルの事項で「Fatal Error」が表示されるのは、指定されたファイルなどが見つからない場合のようです。
しかしコンソールが表示される
上記で、--noconsoleとありますが、これは実行時にコンソールウィンドウが表示されないように指定するもののようです。指定すると確かに初めに表示されなくなりますが、その後Webドライバを導入したあたりで再びコンソール画面が表示されてしまいます。
この動作は謎で、今後の課題ですが、さっぱり検討もつきません。pyinstallerのドキュメントを見るとわかるのかな・・・・
いかがでしたでしょうか。この記事がお役に立ちましたら「ハートボタン」「フォロー」「サポート」「コメント」での応援よろしくお願いします。