pyinstallerを用いてpythonスクリプトをアプリ化しようとしています。
そこで自分がアプリ化するプログラム内ではcsvファイルを用いるのですが、csvファイルをアプリ化した後に読み込む方法がわかりません。
pyinstallerでアプリ化する前はcsvファイルを読みこみプログラムを実行できるのですが、アプリ化した後では実行する事ができません。
自分の作っているプログラムのディレクトリ構成は以下の通りです。
file
|-main.py
|-sub.py
|-sub2.py
|-*.csv
mainスクリプトの中でsub.pyとsub2.pyをimportして使っており、sub.py内でcsvファイルを読み込ませて動作を行なっています。
csvファイルをsub.pyにおいて読み込ませるには下記のように記述しており、カレントディレクリからそのまま読み込むことを想定しています。
python
1with open("*.csv", "r") as f:
pyinstallerの性質から、main.pyのみを指定して下記のように入力してアプリ化させました。
コンパイルは以下のように行なっています。
pyinstaller --windowed main.py
これでdistファイル内に生成されたアプリを実行しようとすると何もおこらないため、アプリの「パッケージの内容を表示」させ、その中にあるUnix実行ファイルのmainを開いてやると、次のエラーがまず表示されました。
File "site-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py", line 28, in <module> FileNotFoundError: Tcl data directory "/Users/~~~/Desktop/file/dist/main.app/Contents/MacOS/tcl" not found. [68860] Failed to execute script pyi_rth__tkinter
これと同様に、tclがtkに変わったエラーも表示されたので、MacOS下にtclとtkという名前のファイルを作ったところこのエラーは消えました。次に出てきたエラーがcsvファイルの読み込みに関するもので以下のエラーが表示されました。
File "main.py", line 5, in <module> File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "sub.py", line 4, in <module> FileNotFoundError: [Errno 2] No such file or directory: '*.csv'
*.csvファイルを読み込むことができていないようだったので様々なディレクトリにcsvファイルを配置したのですが、このエラーは消えませんでした
sub.py内で同じ階層のディレクトリからcsvファイルを読み込むようにしていることが原因でしょうか。
どのように書き換えればcsvファイルをアプリでも読み込む事ができるようになるでしょうか。
pythonは3.6.6を使用しています。
回答3件
あなたの回答
tips
プレビュー