콘솔워크

[Pyinstaller] 생성한 exe 파일이 Trojan 바이러스로 인식되는 문제 본문

프로그래밍/python

[Pyinstaller] 생성한 exe 파일이 Trojan 바이러스로 인식되는 문제

이휘재123 2023. 7. 14. 14:07
반응형

[개요]

pyinstaller는 python 코드를 배포하기 위해 실행파일 (exe)로 만들어주는 편리한 패키지이다.

 

패키지 다운로드

pip install pyinstaller

 

실행파일 생성

pyinstaller -n "파일이름" -w --onefile --clean "main.py" --icon "아이콘.ico"

 

패키지를 받은 후, 위 명령어를 입력하는 방식으로 자주 사용하고있다.

 

--onefile 옵션을 추가하는 것으로 프로그램이 하나의 exe 파일에 정리되어서 배포에도 아주 편리하고, 사용자 입장에서도 좋다.

 

이렇게 생성한 exe 파일은 대부분의 환경에서 잘 작동하지만, 몇몇 PC에서 해당 파일을 Trojan 바이러스로 인식하여 Window Defender에서 자동으로 삭제하는 문제가 있다.

 

물론 개발한 환경의 PC에서는 문제없이 작동하기 때문에 확인을 해보지 못했지만, 

검색을 거듭한 결과, 가장 언급이 많았던 사항은 아래와 같았다.

 

Python의 패키지는 일반적으로 pip로 설치하는데, pyinstaller는 미리 컴파일된 패키지를 다운받아서 설치하게 되는 것 같다. 미리 컴파일 된 pyinstaller의 문제이므로 자신의 PC 환경에 맞게 빌드를 해야한다.

 

 

참고한 블로그

 


 

[현재 작업 환경]

  • 작업 환경 Python: 3.8.7
  • 지금의 작업 환경은 Python 프로젝트를 생성한 후, 'venv'라는 이름의 가상 환경을 생성한 후 해당 가상 환경에 패키지를 다운받은 후 작업을 하고 있음.
  • 따라서 'venv'에 pyinstaller를 다운받을 것
python -m venv venv

venv\Scripts\activate.bat

 

[pyinstaller]

 

Releases · pyinstaller/pyinstaller

Freeze (package) Python programs into stand-alone executables - pyinstaller/pyinstaller

github.com

작성일 기준 최신 버전인 v5.13.0 다운로드 후 압축 해제

 

작업의 편리함을 위해 압축해제 한 폴더의 이름을 'pyinstaller-5.13.0'에서 'pyinstaller'로 변경

 

[pyinstaller 설치]

pyinstaller 폴더를 프로젝트 안의 적당한 곳으로 복사

test -> pyinstaller

 

VS Code의 터미널에서 가상환경 'venv' 활성화 후 아래의 명령어 실행

# 설치된 pyinstaller의 버전을 확인
pyinstaller -v

아직 설치하지 않았으니 이렇게 떠야 정상이다.

버전이 정상적으로 출력 되었다면 pip uninstall pyinstaller로 삭제한 후 다시 올 것

 

 

위에서 복사한 pyinstaller\bootloader 우클릭 후 통합 터미널에서 열기 클릭

해당 위치로 이동되었다.

 

 

pyInstaller의 빌드 도구인 waf를 사용하여 기존 빌드 환경을 초기화하고 모든 플랫폼에서 새로운 빌드를 수행하는 명령어 입력

python ./waf distclean all

 

 

이 과정에는 wheel이라는 패키지를 이용하게 되는데 설치되어있지 않다면 사전에 받아두어야 함

pip install wheel

 

 

상위 폴더로 이동 후 명령어 입력 (project\test\pyinstaller)

cd..
pip install .

설치가 완료 된 모습

 

 

'venv' 가상환경 안에 잘 설치되었는지 확인하기 위해 위에서 입력했던 명령어를 입력해본다.

# 설치된 pyinstaller의 버전을 확인
pyinstaller -v

버전이 출력된 모습
가상환경이 아닌 곳에서는 당연히 작동하지 않는다.

 

pyinstaller 사용준비 완료

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형