2016-06-30 6 views
0

Я использую PyInstaller для сборки дистрибутива Windows exe для приложения Kivy, где используется docutils.rst. При настройке console = False в файле .spec PyInstaller сообщается о вирусе. Когда console = True, все работает плавно. При исключении docutils в пакете ни один вирус не сообщается вообще, но тогда я пропускаю определенные функции docutils.Другие опции для консоли PyInstaller = False?

К сожалению, сообщество разработчиков PyInstaller больше не хочет разрешать эти проблемы и направляет вас к поставщику программного обеспечения для вирусов ... (см.: https://github.com/pyinstaller/pyinstaller/issues?q=is%3Aissue+virus+is%3Aclosed). Конечно, это практически невозможно при разработке приложения для большого разнообразия корпоративного сообщества.

Вопрос 1: Кто-нибудь знает, как отключить консоль пульта python в исполняемом файле?

В противном случае я должен найти другое направление для сборки пакета. Например: How to compile python script to binary executable

Вопрос 2: как вы думаете, это лучший вариант, чтобы перейти в для пакета на основе: питон + kivy + многопроцессорных + docutils.rst парсера?

Для полноты картины я добавил мой фактический PyInstaller спецификации файла:

- - режим: питон - -

import os 
from os.path import join 

from kivy import kivy_data_dir 
from kivy.deps import sdl2, glew 
from kivy.tools.packaging import pyinstaller_hooks as hooks 

block_cipher = None 
kivy_deps_all = hooks.get_deps_all() 
kivy_factory_modules = hooks.get_factory_modules() 

datas = [ 
    (join('common', '*.ini'), 'common'), 
    (join('common', '*.ttf'), 'common') 
] 

# list of modules to exclude from analysis 
excludes = ['Tkinter', '_tkinter', 'twisted', 'pygments'] 

# list of hiddenimports 
hiddenimports = kivy_deps_all['hiddenimports'] + kivy_factory_modules 
hiddenimports += ['starmeter'] 

# binary data 
sdl2_bin_tocs = [Tree(p) for p in sdl2.dep_bins] 
glew_bin_tocs = [Tree(p) for p in glew.dep_bins] 
bin_tocs = sdl2_bin_tocs + glew_bin_tocs 

# assets 
kivy_assets_toc = Tree(kivy_data_dir, prefix=join('kivy_install', 'data')) 
source_assets_toc = Tree('images', prefix='images') 
assets_toc = [kivy_assets_toc, source_assets_toc] 

tocs = bin_tocs + assets_toc 

a = Analysis(['wflmain.py'], 
      pathex=[os.getcwd()], 
      binaries=None, 
      datas=datas, 
      hiddenimports=hiddenimports, 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=excludes, 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) 

exe1 = EXE(pyz, 
      a.scripts, 
      name='sgc', 
      exclude_binaries=True, 
      icon=join('images', 'sgc.ico'), 
      debug=False, 
      strip=False, 
      upx=True, 
      console=False) 

coll = COLLECT(exe1, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       *tocs, 
       strip=False, 
       upx=True, 
       name='sgc') 
+1

Просто запустите 'pyinstaller -w file.py' – Eular

+0

Если проблема заключается только в упаковке, установите антивирус для _ignore_ этого конкретного файла, если вы уверены, что это не вирус (например,' run.exe' из официального репо), и если он упаковывает без ошибок, попробуйте приложение. Окончательный .exe всегда работал для меня без каких-либо антивирусных уведомлений. – KeyWeeUsr

+0

Привет, KeyWeeUSr, вот что я сделал. Но затем установка настольного приложения в стороннюю систему, другой вирус-сканер сообщает о том же вирусе. Мой вирус-поставщик F-Secure проанализировал .exe, сделал ложный положительный результат и обновит свою базу данных. Но как насчет всех других продавцов .......? –

ответ

0

Вопрос 1: Кто-нибудь знает, как отключить консольная консоль python в исполняемом файле?

проход noconsole как аргумент @ CLI:

pyinstaller --noconsole --onefile <filename> 

Вопрос 2: как вы думаете, это лучший вариант, чтобы перейти в для пакета на основе: питон + kivy + многопроцессорная + Docutils .rst парсер?

Pyinstaller отлично справляется с компиляцией зависимостей, поэтому, если у вас нет проблем, то это же хорошо!

+0

Э-э ... немного мелочи - без [this] (http://stackoverflow.com/a/36021330/5994041) ответ '--onefile' не будет работать. Пожалуйста, не указывайте дополнительные аргументы, если вы не уверены, что они работают из коробки (или без способа их использования). : P – KeyWeeUsr

+1

Э-э ... немного еще немного. В моем файле spec уже есть опция console = False. Я добавил файл спецификации. См. Выше. Поэтому TMHO либо -w или --noconsole просто не будет действительным вариантом ..... –

+0

'--onefile' не работал для меня. Но это делало: ''pyinstaller --noconsole '' –