LoginSignup
6
6

More than 5 years have passed since last update.

PythonスクリプトをPyInstallerでWindowsの実行体にする際にハマったことをまとめる

Posted at

TL;DR

ubuntu側で開発したPythonスクリプトをWindowsの実行体に変換する必要があった

実際の作業で何点かハマったので、まとめておく

ちょっと前の作業をまとめているので、バージョン情報等あいまい

※ 本記事は、2019/02/05に弊社スタッフブログに投稿した記事をQiitaに転載しています。

発端

ubuntuで開発したPythonスクリプトをWindows上で実行する必要があった。

将来的に配布を簡単にしたい、という要望もあり、使用するPCに逐一Python環境をインストールするのは避けたかったので、PyInstallerにて実行体に変換した。

いくつかハマったことがあったので、後学のためにまとめておく。

ブログに起こすにあたってググってみたら、大半は下記の記事にあった・・・
- 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関数に明示的にデリミタ設定することで対応。

参照URL

6
6
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
6
6