如何收集使用pyinstaller生成的所有文件和文件夹(可执行文件除外)(kivy应用程序)

时间:2018-10-09 15:14:20

标签: kivy pyinstaller cx-freeze

我正在构建一个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的文件夹)中得到的:

enter image description here

这就是我想要的(或类似的东西):

enter image description here

当我将 cx_freeze base = 'Win32GUI'一起使用时,我的应用程序没有出现,我只有 cx_Freeze:主脚本中的Python错误作为标题。我的应用程序,我看不出是什么原因。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,我将cx_freeze与base = 'Win32GUI'一起使用,该问题是由使用'Win32GUI'时无法在gui中显示的日志引起的。

我试图将它们定向到日志文件,但未成功,所以我转到\ Anaconda3-Windows-x86_64 \ Lib \ logging文件夹中的 __ init __。py 文件,我发表了评论在行号999上,我将其替换为pass。如果可行的话,这并不愚蠢,希望这会有所帮助。让我知道您是否还有其他解决方案。谢谢

这是__init__py中的代码:

图片