【问题标题】:Other options for PyInstaller console = False?PyInstaller 控制台的其他选项 = False?
【发布时间】:2016-11-02 17:22:09
【问题描述】:

我正在使用 PyInstaller 为使用 docutils.rst 的 Kivy 应用程序构建 Windows exe 可分发包。在 PyInstaller .spec 文件中设置 console = False 时,会报告病毒。当控制台 = True 时,一切运行顺利。在包中排除 docutils 时,根本没有报告病毒,但是我缺少特定的 docutils 功能。

不幸的是,PyInstaller 开发社区不想再解决这些问题,而是将您引导至病毒软件供应商......(请参阅:https://github.com/pyinstaller/pyinstaller/issues?q=is%3Aissue+virus+is%3Aclosed)。当然,在为大型多元化企业社区开发应用程序时,这实际上是不可能的。

问题 1:有人知道如何在可执行文件中禁用控制台 python 控制台吗?

否则我应该找到另一个方向来构建一个包。例如: How to compile python script to binary executable

问题 2:对于基于 python + kivy + multiprocessing + docutils.rst parser 的包,您认为最好的选择是什么?

为了完整起见,我添加了我实际的 PyInstaller 规范文件:

-- 模式:python --

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')

【问题讨论】:

  • 运行pyinstaller -w file.py
  • 如果问题只是包装问题,如果您确定它不是病毒(例如来自官方 repo 的 run.exe),请将您的防病毒设置为 ignore 该特定文件包没有错误,试试这个应用程序。最终的 .exe 始终为我工作,没有任何防病毒通知。
  • 嗨 KeyWeeUSr,这就是我所做的。但是在第 3 方系统上安装桌面应用程序后,另一个病毒扫描程序报告了相同的病毒。我的病毒供应商 F-Secure 分析了 .exe,得出了误报,并将更新他们的数据库。但是所有其他供应商呢......?
  • @BillBridge 试试signing。如果这没有帮助,那么我没有线索。然后你只能在 .exe 文件中添加一些注释,或者使用不同的 python 打包器。
  • 一年后出现同样的问题。您曾经解决此问题或找到禁用方法。我什至无法隐藏消息。

标签: python kivy pyinstaller docutils


【解决方案1】:

问题 1:有人知道如何在可执行文件中禁用控制台 python 控制台吗?

noconsole 作为参数传递@CLI:

 pyinstaller --noconsole --onefile <filename>

问题 2:对于基于 python + kivy + multiprocessing + docutils.rst 解析器的包,您认为什么是最佳选择?

Pyinstaller 在编译依赖项方面做得很好,所以如果您没有遇到任何问题,同样可以!

【讨论】:

  • Eh.. 只是一个小细节 - 没有 this 回答 --onefile 将无法工作。如果您不确定它们开箱即用(或无法使用它们),请不要提供额外的参数。 :P
  • 呃......只是其他一些细节。在我的规范文件中已经有选项 console = False。我已经添加了规范文件。往上看。所以 TMHO 无论是 -w 还是 --noconsole 都不是一个有效的选项.....
  • --onefile 对我不起作用。但这样做了:'pyinstaller --noconsole &lt;filename&gt;'
  • specfile 覆盖了这些选项中的大部分,因此它们通常不起作用...
猜你喜欢
  • 1970-01-01
  • 2017-09-16
  • 2022-01-17
  • 2011-06-15
  • 2014-02-16
  • 1970-01-01
  • 2012-11-17
  • 2011-01-22
  • 2011-08-30
相关资源
最近更新 更多