私は単一の実行可能ファイルを作成しようとしてきましたが、近づいています。PyInstaller の使用をお勧めしないでください。そのルートを試し、SO hereで質問し、チケットを入れました。それは近いですが、完全には機能していません。私は現在py2exeを試していますが、非常に近いです。pyinstaller では、リソース ファイルを作成できます (これにより、含まれているファイルを使用して実行可能ファイルがビルドされます。その後、一時フォルダーでこれらにアクセスできます)。
py2exeでも同じことをしたい。実行可能ファイルは 1 つですが、追加のフォルダーが 5 つ (maps、mpl-data、data、pics、および tcl) あります。私はこの質問を見たことがありますが、それを理解することも、機能させることもできないようです。私のメインのpyファイルでPersistentDict(filepath)
は、ファイルへのパスが必要な場所を使用しています。
私の質問は 2 つの部分です。 1. ファイル (以下のデータ ファイル) を実行可能ファイルにパッケージ化するにはどうすればよいですか。2. コードでこれらのファイルにアクセスし、/temp/file1.jpg などのパスを (文字列として) 返すにはどうすればよいですか。
これが私のpy2exeセットアップファイルのコードです。matplotlibがあり、実行可能ファイルにmpl-dataを正しく含める必要があることに注意してください。ありがとう!
from distutils.core import setup
import py2exe
import shutil
import glob
import matplotlib,six
opts = {'py2exe': { "includes" : ["matplotlib.backends",
"matplotlib.backends.backend_qt4agg",
"matplotlib.figure","numpy",
"six",
"mpl_toolkits.basemap",
"matplotlib.backends.backend_tkagg"],
'excludes': ['_gtkagg', '_tkagg','_agg2','_cairo',
'_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo', 'tcl' ],
'dll_excludes': ['libgdk-win32-2.0-0.dll','w9xpopen.exe',
'libgobject-2.0-0.dll'],
'bundle_files': 1,
'dist_dir': "Dist Folder",
'compressed': True,
}
}
data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
(r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
(r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
(r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')),
(r'mpl-data\data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\data\*.*')),
('data', ['C:\\Users\\Me\\Documents\\Example_Json_File.json']),
('pics', ['C:\\Users\\Me\\Documents\\Example_Icon.ico',
'C:\\Users\\Me\\Documents\\Example_Jpg.jpg',
])]
setup(windows=[{"script" : "MyMainScript.py",
"data_files" : data_files,
"icon_resources": [(1, 'C:\\Users\\Me\\Documents\\Example_Icon.ico')]}, ],
version = "1.0",
options=opts,
data_files=data_files,
zipfile = None,
)