日々の雑務を自動化しようと Mac 環境で python + pyinstaller を使って実行ファイルを作りました。
そのプログラムはファイルをダブルクリックした場所の絶対パスを取得し
その絶対パスを利用してあれこれするプログラムだったのですが、
os.getcwd() では MackintoshHD/var/ 以下の別のパスを取得してしまい正しく動きませんでした。
環境
・OS : Mac Monterey
・Python : 3.10.8
解決法(条件付き)
Unix 実行ファイルではうまく絶対パスを取得できました。
.app では xxxx.app/Contents/MacOS が末尾についてしまうので除去する処理が必要そうです。
os.path.realpath(os.path.dirname(sys.argv[0]))
以下のドキュメントが参考になりました。
Run-time Information — PyInstaller 6.11.1 documentation
少し話が逸れますが、実行ファイルのデバッグ方法がわからず
tkinter の messagebox に取得した絶対パスを出力してデバッグしていったのですが
結構めんどくさかったです。絶対もっといい方法がある気がします、、、笑
終わりに
Python にはカレントディレクトリの取得方法がいくつかありますが、
どれが何を取得しているのか把握していないと思わぬバグが出ますね。
あと Mac についての知識がまだ少なくて慌てることが多いのでそこも改善が必要そうです。
どこかで整理するタイミングを見つけようと思います。