Другие параметры для консоли PyInstaller = False?

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

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

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

В противном случае я должен найти другое направление для создания пакета. Например: Как скомпилировать скрипт Python в двоичный исполняемый файл< /а>

Вопрос 2: что, по вашему мнению, является лучшим вариантом для пакета, основанного на: python + kivy + multiprocessing + синтаксический анализатор 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')

person Bill Bridge    schedule 30.06.2016    source источник
comment
Просто запустите pyinstaller -w file.py   -  person Eular    schedule 30.06.2016
comment
Если проблема заключается только в упаковке, настройте свой антивирус на игнорирование этого конкретного файла, если вы уверены, что это не вирус (например, run.exe из официального репозитория), и если он упаковывается без ошибок, попробуйте приложение. Финальный .exe у меня всегда работал без всяких уведомлений антивируса.   -  person Peter Badida    schedule 30.06.2016
comment
Привет, KeyWeeUSr, я так и сделал. Но затем при установке настольного приложения в сторонней системе другой антивирусный сканер сообщает о том же вирусе. Мой поставщик вирусов F-Secure проанализировал .exe, пришел к выводу о ложном срабатывании и обновит свою базу данных. Но как насчет всех других продавцов.......?   -  person Bill Bridge    schedule 01.07.2016
comment
@BillBridge попробуйте подписать. Если это не поможет, то я понятия не имею. Затем вы можете только добавить примечание к файлу .exe или использовать другой упаковщик Python.   -  person Peter Badida    schedule 01.07.2016
comment
Та же проблема здесь 1 год спустя. Вы когда-нибудь решите это или найдете способ отключить. Я даже не могу подавить сообщения.   -  person    schedule 11.12.2017
comment
Совершенно уверен, что антивирусу не нравится упаковка UPX. Тогда, когда я был подростком, играя с троянами, мы упаковывали их с помощью upx, чтобы сделать файлы меньшего размера и обмануть антивирусы, которые больше не распознавали вредоносное ПО из-за exe-упаковки. Попробуйте upx=false   -  person leosok    schedule 12.11.2018


Ответы (1)


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

передать noconsole в качестве аргумента @CLI:

 pyinstaller --noconsole --onefile <filename>

Вопрос 2: что, по вашему мнению, является лучшим вариантом для пакета, основанного на: python + kivy + multiprocessing + синтаксический анализатор docutils.rst?

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

person wolframalpha    schedule 30.06.2016
comment
Эх... маленькая деталь - без этого ответа --onefile не получится. Пожалуйста, не указывайте дополнительные аргументы, если вы не уверены, что они работают «из коробки» (или не знаете, как их использовать). :П - person Peter Badida; 30.06.2016
comment
Эх... еще одна деталь. В моем файле спецификаций уже есть опция console = False. Я добавил файл спецификации. См. выше. Так что TMHO либо -w, либо --noconsole просто не будут допустимыми вариантами..... - person Bill Bridge; 01.07.2016
comment
--onefile мне не помогло. Но это сделало: 'pyinstaller --noconsole <filename>' - person Chris Nielsen; 02.08.2017
comment
Спецфайл переопределяет большинство этих опций, поэтому они часто не работают... - person noname; 02.05.2019