Mic*_*eng 8 python windows pyinstaller python-2.7
我一直在梳理Stack Overflow和网络的其余部分,介绍如何将数据文件添加到我的python应用程序中:
import Tkinter
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
--- Everything Fine Here ---
self.B = Tkinter.Button(self, text = 'Create Document', command = self.OnButtonClick)
self.B.grid(column = 0, row = 6)
def OnButtonClick(self):
createDoc()
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('Receipt Form')
app.iconbitmap(os.getcwd() + '/M.ico')
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
我尝试过使用.spec文件没有运气
Onedir工作正常,但是当我尝试编译成单个可执行文件时,它会出现错误,即文件'M.ico'未定义.
如果有人能够将数据文件与pyinstaller捆绑到一个文件中.请帮忙.谢谢.
我在使用PyInstaller 3.2运行Python 2.7的Windows 10计算机上
您必须指定要添加到pyinstaller .spec文件中的每个数据文件,或通过命令行选项(.spec更容易。)下面是我的.spec文件,带有“数据”部分:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['pubdata.py'],
pathex=['.', '/interface','/recommender'],
binaries=None,
datas=[('WordNet/*.txt','WordNet'),
('WordNet/*.json','WordNet'),
('WordNet/pdf_parsing/*.json','pdf_parsing'),
('WordNet/pdf_parsing/*.xml','pdf_parsing'),
('images/*.png','images'),
('database/all_meta/Flybase/*.txt','all_meta'),
('database/all_meta/Uniprot/*.txt','all_meta'),
('database/json_files/*.json','json_files'),
('Data.db','.')],
hiddenimports=['interface','recommender'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='GUI',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='GUI')
app = BUNDLE(coll,
name='App.app',
icon=None)
Run Code Online (Sandbox Code Playgroud)
此后,如果您尝试访问在代码中的.spec文件中指定的任何数据文件,则必须使用Pyinstaller的_MEIPASS文件夹来引用您的文件。这是我使用名为Data.db的文件执行的操作:
import sys
import os.path
if hasattr(sys, "_MEIPASS"):
datadir = os.path.join(sys._MEIPASS, 'Data.db')
else:
datadir = 'Data.db'
conn = lite.connect(datadir)
Run Code Online (Sandbox Code Playgroud)
上面的方法代替了原来的语句:
conn = lite.connect("Data.db")
Run Code Online (Sandbox Code Playgroud)
当我经历同一件事时,此链接对我很有帮助:https : //irwinkwan.com/2013/04/29/python-executables-pyinstaller-and-a-48-hour-game-design-compo/
希望这可以帮助!
归档时间: |
|
查看次数: |
3202 次 |
最近记录: |