1

PyInstaller を使用して、docutils.rst が使用されている Kivy アプリケーション用の Windows exe 配布可能パッケージをビルドしています。PyInstaller .spec ファイルで console = False を設定すると、ウイルスが報告されます。console = True の場合、すべてがスムーズに実行されます。パッケージ内の docutils を除外すると、ウイルスはまったく報告されませんが、特定の docutils 機能が欠落しています。

残念ながら、PyInstaller 開発コミュニティはこれらの問題をこれ以上解決することを望んでおらず、ウイルス ソフトウェア ベンダーに問い合わせることを望んでいません。 is%3Aclosed )。もちろん、大規模で多様な企業コミュニティ向けのアプリケーションを開発する場合、これは事実上不可能です。

質問 1: 実行可能ファイルでコンソール python コンソールを無効にする方法を知っている人はいますか?

それ以外の場合は、パッケージを構築する別の方向を見つける必要があります。例: Python スクリプトをバイナリ実行可能ファイルにコンパイルする方法

質問 2: python + kivy + multiprocessing + docutils.rst parser に基づくパッケージに移行するための最良のオプションは何だと思いますか?

完全を期すために、実際の 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')
4

1 に答える 1

2

質問 1: 実行可能ファイルでコンソール python コンソールを無効にする方法を知っている人はいますか?

noconsole引数 @ CLI として渡します:

 pyinstaller --noconsole --onefile <filename>

質問 2: python + kivy + multiprocessing + docutils.rst パーサーに基づくパッケージに移行するための最良のオプションは何だと思いますか?

Pyinstaller は依存関係のコンパイルに優れているため、問題に直面していない場合は、同じことを行っても問題ありません。

于 2016-06-30T14:32:18.863 に答える