作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我用 python 编写了 GTK 应用程序。
所有图形用户界面都在 glade 文件中,并且使用了一些图像。我希望将我的应用程序编译成可执行文件。为此,我正在使用 PyInstaller 编译器和 UPX 打包机。
我已经按照手册说的做了:
python Configure.py
python Makespec.py --onefile --windowed --upx /path/to/yourscript.py
python Build.py /path/to/yourscript.spec
PyInstaller 完美运行并创建一个 exe 文件。但是为了使我的应用程序正常工作,我必须将我的 glade 和 image 文件复制到 exe 的文件夹中。
有什么方法可以将这些文件编译成可执行文件吗?
我以各种方式编辑了我的规范文件,但我无法实现我想要的。下面的spec文件只是复制文件到目录,并没有编译成可执行文件
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'r:\\connection\\main.py'],
pathex=['C:\\Documents and Settings\\Lixas\\Desktop\\pyinstaller-1.5-rc1'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'NetworkChecker.exe'),
debug=False,
strip=False,
upx=True,
console=False,
icon='r:\\connection\\ikona.ico' )
coll = COLLECT(
exe,
[('gui.glade', 'r:\\connection\\gui.glade', 'DATA')],
[('question16.png', 'r:\\connection\\question16.png', 'DATA')],
# a.binaries,
# strip=False,
upx=True,
name='distFinal')
我希望只有一个包含所有内容的可执行文件
最佳答案
PyInstaller 确实允许您将所有资源捆绑到 exe 中,而无需将数据文件转换为 .py 文件的棘手操作——您的 COLLECT 对象似乎是正确的,棘手的步骤是访问这些文件在运行时。 PyInstaller 会将它们解压到一个临时目录中,并通过 _MEIPASS2 变量告诉您它们的位置。要在开发模式和打包模式下获取文件路径,我使用这个:
def resource_path(relative):
return os.path.join(
os.environ.get(
"_MEIPASS2",
os.path.abspath(".")
),
relative
)
# in development
>>> resource_path("gui.glade")
"/home/shish/src/my_app/gui.glade"
# in deployment
>>> resource_path("gui.glade")
"/tmp/_MEI34121/gui.glade"
关于python - 如何将所有资源编译成一个可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6689410/
我是一名优秀的程序员,十分优秀!