我正在构建一个kivy应用程序,我使用PyInstaller将其转换为可执行文件,并且效果很好,但是问题是Myapp生成了很多文件(.dll,.pyd ... etc) .exe在同一文件夹中。我想将应用程序提供给多个用户,并且我希望将除Myapp.exe以外的所有文件和文件夹放入一个文件夹或最多2个文件夹。
我在另一个应用程序中遇到了这个问题,因为cx_freeze通过生成lib文件夹来做到这一点。 Pyinstaller并未生成此文件夹,而是将所有文件与可执行文件显示在同一文件夹中。
请问有人可以为我提供解决方案吗?
这是我的.spec:
block_cipher = None
def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path
a = Analysis(['Myapp.py'],
pathex=['C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\\\deskapp\\Code'],
binaries=[],
datas=[],
hiddenimports=['os','pandas','sys','kivy'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)
dict_tree = Tree('C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\deskapp\\Code\\kv Scripts', prefix='kv Scripts', excludes=["*.pyc"])
a.datas += dict_tree
dict_tree = Tree('C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\deskapp\\Code\\Images_logo', prefix='Images', excludes=["*.pyc"])
a.datas += dict_tree
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='My app',
debug=False,
strip=False,
upx=True,
icon = 'C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\deskapp\\Code\\Images_logo\\MyIcon.ico',
console=False )
coll = COLLECT(exe,
Tree('C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\share\\glew\\bin\\'),
Tree('C:\\HOMEWARE\\Anaconda3-Windows-x86_64\\share\\sdl2\\bin\\'),
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='My app')
这就是我在dist文件夹(生成exe的文件夹)中得到的:
这就是我想要的(或类似的东西):
当我将 cx_freeze 与base = 'Win32GUI'
一起使用时,我的应用程序没有出现,我只有 cx_Freeze:主脚本中的Python错误作为标题。我的应用程序,我看不出是什么原因。
提前谢谢
答案 0 :(得分:0)
我解决了这个问题,我将cx_freeze与base = 'Win32GUI'
一起使用,该问题是由使用'Win32GUI'
时无法在gui中显示的日志引起的。
我试图将它们定向到日志文件,但未成功,所以我转到\ Anaconda3-Windows-x86_64 \ Lib \ logging文件夹中的 __ init __。py 文件,我发表了评论在行号999上,我将其替换为pass
。如果可行的话,这并不愚蠢,希望这会有所帮助。让我知道您是否还有其他解决方案。谢谢
这是__init__py
中的代码:
图片