TL;DR
ubuntu側で開発したPythonスクリプトをWindowsの実行体に変換する必要があった
実際の作業で何点かハマったので、まとめておく
ちょっと前の作業をまとめているので、バージョン情報等あいまい
発端
ubuntuで開発したPythonスクリプトをWindows上で実行する必要があった。
将来的に配布を簡単にしたい、という要望もあり、使用するPCに逐一Python環境をインストールするのは避けたかったので、PyInstallerにて実行体に変換した。
いくつかハマったことがあったので、後学のためにまとめておく。
ブログに起こすにあたってググってみたら、大半は下記の記事にあった・・・
ハマったこと
__file__の指すパスがおかしい
PyInstallerで実行体化すると、__file__シンボルが、実行体変換前のパスに置換されてしまう模様。
参照URLでも言及されていたが、sys.argv[0]に置き換えて対処。
PyInstallerで指定したモジュールよりも上の階層のソースコードが実行体に同梱されない
ソースコードは下記のようなフォルダ構成だった。
├ Func1
│ ├ func1_entry.py
│ └ func1_body.py
└ Main
└ main.py
main.pyから、上の階層のfunc1_entry.pyをimportして使用している。
PyInstallerの対象モジュールとして、main.pyを指定すると、できた実行体を実行した際に、'func1_entry.py が見つからない'旨の実行時エラーが発生する。
これは結局解消できなくて、フォルダ構成を下記のように変更した。
└ Main
└ main.py
└ Func1
├ func1_entry.py
└ func1_body.py
pandasでcsv読み込む際の行デリミタのデフォルトが異なる
PyInstallerを実行するPython環境はAnacondaで作成したのだが、pandasのread_csv関数でcsvファイルを読み込む際に、'Cr', 'Lf'どちらも行デリミタとして認識されてしまった。
Excel等で作成したcsvファイルは'Cr + Lf'が行デリミタなので、倍の行数があるように見えてしまった。
read_csv関数に明示的にデリミタ設定することで対応。