Lix*_*xas 5 python compiler-construction pygtk glade pyinstaller
我用python编写了GTK应用程序.
所有图形用户界面都在glade文件中,并且使用了一些图像.我希望将我的应用程序编译为EXEcutable文件.为此,我正在使用PyInstaller编译器和UPX 打包器.
我按照手册说的做了:
python Configure.py
python Makespec.py --onefile --windowed --upx /path/to/yourscript.py
python Build.py /path/to/yourscript.spec
Run Code Online (Sandbox Code Playgroud)
PyInstaller完美地工作并创建一个exe文件.但为了使我的应用程序正常工作,我必须将我的glade和图像文件复制到exe的文件夹中.
有没有办法将这些文件编译成可执行文件?
我已经以各种方式编辑了我的spec文件,但我无法实现我想要的.下面的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')
Run Code Online (Sandbox Code Playgroud)
我希望只有一个包含所有内容的可执行文件
通过一些更改,您可以将所有内容合并到源代码中,从而合并到可执行文件中.
如果您运行gdk-pixbuf-csource图像文件,则可以将它们转换为字符串,然后可以使用它们加载gtk.gdk.pixbuf_new_from_inline().
您还可以将Glade文件作为字符串包含在程序中,然后使用它加载它gtk.Builder.add_from_string().
PyInstaller 不会让您将所有资源捆绑成exe文件,而不必打开数据文件到.py文件的trickyness -你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"
Run Code Online (Sandbox Code Playgroud)