我一直在努力制作一个可执行文件而且我已经接近了。请不要建议我使用PyInstaller - 我已经尝试过这条路线,在SO here上询问,并且已经存入了票证。它很接近但不太合适。我现在正在尝试py2exe,我也非常接近。在pyinstaller中,我能够创建资源文件(使用包含的文件构建可执行文件 - 然后我可以在临时文件夹中访问这些文件)。
我想对py2exe做同样的事情。我有一个可执行文件,但有五个额外的文件夹(地图,mpl-data,data,pics和tcl)。我已经看到了这个question,但似乎无法理解它,也无法让它发挥作用。在我的主py文件中,我正在使用PersistentDict(filepath)
,这是我需要文件路径的地方。
我的问题分为两部分: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,
)
答案 0 :(得分:4)
Guy here解释了如何使用py2exe打包到一个文件。他的设置也没有在可执行文件中打包资源。
当我打包我的应用程序时,我不使用一个可执行选项
options = {"py2exe": {'bundle_files': 1, 'compressed': True}},
甚至不打算把它们放在library.zip中
options = {"py2exe": {"skip_archive":0}}
在一个目录中只有一些pyc,数据文件,dll等。然后使用NSIS或Inno设置创建安装程序。由于我的一些应用程序必须作为服务运行,Inno正在处理这个问题。 这种方法的最大优点是,您不必处理文件的“冻结”路径,这与您的原始路径不同。
否则,您可能需要更改代码以检测冻结路径,例如http://www.py2exe.org/index.cgi/WhereAmI
答案 1 :(得分:0)
我已经看到批处理到EXE转换器(Advanced Batch to EXE Converter)这样做,但是奇怪的是:它会让你把你的文件放在一个“烘焙”目录中,它们可以通过“ %MYFILES%\ [path]“目录/变量。如果你有一些摆动空间,请检查一下。唯一的问题是它会在文件中添加一个“简介”(读取:美化的Flash动画),它将显示为FIRST。 (我反对盗版,但我在这里也没关系......“介绍”是 45秒 并且令人讨厌。)
如果这不会给你带来麻烦,那就尝试一下。