Как собрать все файлы и папки, созданные с помощью pyinstaller, кроме исполняемого файла (приложение kivy) - PullRequest
0 голосов
/ 09 октября 2018

Я создаю приложение kivy, я преобразую его в исполняемый файл с помощью PyInstaller, и оно работает очень хорошо, но проблема в том, что существует множество файлов (.dll, .pyd ... и т. Д.), Которые создаются с помощью Myapp.exe в той же папке.я хочу передать приложение нескольким пользователям и поместить все файлы и папки в одну папку или максимум в 2, кроме Myapp.exe.

У меня было это для другого приложения, потому что 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

и это то, что я хочу (или что-то вродеthis):

enter image description here

Когда я использую cx_freeze с base = 'Win32GUI', мое приложение не появляется, у меня просто cx_Freeze: Pythonошибка в основном скрипте как заголовок моего приложения, и я не вижу, в чем причина.

Заранее спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Я решил проблему, я использовал cx_freeze с base = 'Win32GUI', проблема была вызвана журналами, которые не могут отображаться в графическом интерфейсе при использовании 'Win32GUI'.

Я пытался направить их нафайл журнала, но у меня ничего не получилось, поэтому я перешел к файлу __ init __. py в папке \ Anaconda3-Windows-x86_64 \ Lib \ logging и прокомментировал номер строки 999 и заменил ее наpass.Это не глупо, если это работает, надеюсь, это поможет кому-то.дайте мне знать, если у вас есть другое решение.спасибо

вот код в __init__py:

картинка

...