2016-06-30 2 views
0

나는 Pyutster를 사용하여 docutils.rst가 사용되는 Kivy 응용 프로그램 용 Windows exe 배포 가능 패키지를 빌드하고 있습니다. PyInstaller .spec 파일에서 console = False로 설정하면 바이러스가보고됩니다. console = True이면 모든 것이 원활하게 실행됩니다. 패키지에서 docutils를 제외하면 바이러스는 전혀보고되지 않지만 특정 docutils 기능이 누락됩니다.PyInstaller console = False의 다른 옵션은?

불행히도 PyInstaller 개발 커뮤니티는 더 이상 이러한 문제를 해결하지 않고 바이러스 소프트웨어 공급 업체로 안내합니다 (https://github.com/pyinstaller/pyinstaller/issues?q=is%3Aissue+virus+is%3Aclosed 참조). 물론 이것은 대규모의 다양한 엔터프라이즈 커뮤니티를위한 애플리케이션을 개발할 때 실제로 불가능합니다.

질문 1 : 실행 파일에서 콘솔 파이썬 콘솔을 비활성화하는 방법을 아는 사람이 있습니까?

그렇지 않으면 패키지를 만드는 또 다른 방향을 발견해야합니다. 예를 들면 : How to compile python script to binary executable

질문 2 : + kivy + 멀티 + docutils.rst 파서 파이썬 : 당신이 기반으로하는 패키지로 이동할 수있는 가장 좋은 방법이 무엇인지 생각하십니까? - - 모드

: 파이썬 --

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_에 설정하십시오 (예 : 공식 repo의 run.exe). 그것은 오류없이 패키지, 응용 프로그램을 사용해보십시오. 최종 .exe는 항상 바이러스 백신 알림없이 나를 위해 일했습니다. – KeyWeeUsr

+0

안녕 KeyWeeUSr, 그게 내가 한거야. 그러나 타사 시스템에 데스크톱 응용 프로그램을 설치하면 다른 바이러스 스캐너가 동일한 바이러스를보고합니다. 내 바이러스 공급 업체 인 F-Secure는 .exe를 분석하여 오 탐지 (false positive)를 결론 내리고 데이터베이스를 업데이트합니다. 하지만 다른 모든 업체들은 어쩌고 .......? –

답변

0

질문 1 : 완성도를 위해서

, 내 실제 pyInstaller 중에 사양 파일을 추가 한 사람이 사용하지 않도록 설정하는 방법을 알고 있나요 콘솔 파이썬 콘솔 실행 파일에? 인수 @의 CLI로

패스 noconsole :

pyinstaller --noconsole --onefile <filename> 

질문 2 : 파이썬 + kivy + 멀티 + docutils : 당신이 생각 무엇을 기반으로 패키지로 이동할 수있는 최선의 방법입니다 .rst 파서?

Pyinstaller는 종속성을 컴파일 할 때 훌륭한 작업을 수행하므로 문제가 발생하지 않은 경우에도 마찬가지입니다.

+0

어 .. 조금 자세히 - [this] (http://stackoverflow.com/a/36021330/5994041) 대답을하지 않으면'--onefile'이 작동하지 않습니다. 그들이 상자에서 (또는 사용법을 모르겠다) 잘 작동하지 않는다면 추가 args를 제공하지 마십시오. : P – KeyWeeUsr

+1

어 ... 조금 다른 세부 사항. 내 사양 파일에는 이미 console = False 옵션이 있습니다. spec 파일을 추가했습니다. 위 참조. 따라서 TMHO는 -w 또는 --noconsole 중 하나만 유효한 옵션이 아닙니다 ..... –

+0

'--onefile'이 나에게 적합하지 않습니다. 그러나 이것은 :''pyinstaller --noconsole '' –