2024/05/30(木) [n年前の日記]
#1 [python] PyInstallerがウイルスとして誤検出される問題を調べてた
Pythonスクリプトを、Windowsの実行形式ファイル(exeファイル)に変換できる、PyInstaller というプログラムがあるのだけど。
2024/05/30現在、Windows10 x64 22H2 + Python 3.10.10 64bit で PyInstaller を使おうとすると、Windows Defender からウイルスとして誤検出されて、変換処理途中でエラーが発生してしまう。
なんでも、PyInstaller がウイルス作成に使われてしまうことが多くなったせいで、PyInstaller を使ってexe化されたファイルはウイルスに違いないと決めつけられがちな状況になっているのだとか…。
PyInstaller に同梱されてる bootloader なる部分を再作成してインストールし直すと改善する可能性がある、という話を見かけたので試してみた。
_Pyinstallerで実行ファイルがマルウェアに分類されてしまったときの対策 - はまたんく
_【Pyinstaller】Windows Defenderに引っかからないようにする - Qiita
_PyInstallerで作ったexeがウィルス判定される|こいでみず
2024/05/30現在、Windows10 x64 22H2 + Python 3.10.10 64bit で PyInstaller を使おうとすると、Windows Defender からウイルスとして誤検出されて、変換処理途中でエラーが発生してしまう。
なんでも、PyInstaller がウイルス作成に使われてしまうことが多くなったせいで、PyInstaller を使ってexe化されたファイルはウイルスに違いないと決めつけられがちな状況になっているのだとか…。
PyInstaller に同梱されてる bootloader なる部分を再作成してインストールし直すと改善する可能性がある、という話を見かけたので試してみた。
_Pyinstallerで実行ファイルがマルウェアに分類されてしまったときの対策 - はまたんく
_【Pyinstaller】Windows Defenderに引っかからないようにする - Qiita
_PyInstallerで作ったexeがウィルス判定される|こいでみず
◎ Cコンパイラが使える状態にする :
作業には何かしらのCコンパイラが必要らしい。MinGW64 も使えるらしいけれど、今回は、Microsodt Visual Studio 2022 の Visual C++ (cl.exe) を利用してみた。
Windwos10のスタートメニューの中に、「x64 Native Tools Command Prompt for VS 2022」というショートカットファイルがあるので、それを起動すればDOS窓が開いて cl.exe が使えるようになる。
cl.exe と打ってバージョンが表示されるなら使える状態になっている。
Windwos10のスタートメニューの中に、「x64 Native Tools Command Prompt for VS 2022」というショートカットファイルがあるので、それを起動すればDOS窓が開いて cl.exe が使えるようになる。
cl.exe と打ってバージョンが表示されるなら使える状態になっている。
> cl.exe Microsoft(R) C/C++ Optimizing Compiler Version 19.38.33133 for x64 Copyright (C) Microsoft Corporation. All rights reserved. 使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ]
◎ bootloader再作成 :
bootloader の再作成には、githubで公開されている PyInstaller のリポジトリが必要だそうで。
_pyinstaller/pyinstaller: Freeze (package) Python programs into stand-alone executables
以下では git clone で入手しているけれど、上記のページからリポジトリを zip で入手することもできるので *1 、git を持ってない場合は zip を入手して解凍しても作業ができるのではないかと。
また、Python の wheel モジュールも必要らしいので、pip を使ってインストールしておく。
そんなわけで、以下を打った。
巷の解説ページでは、作成された PyInstaller のインストール操作として、python setup.py install を紹介してる事例が多かったけれど、自分の環境でソレをすると何故かエラーになってしまった。エラーメッセージの中に、「"pip install ." を使え」と書いてあったので試してみたところインストールができた。
PyInstaller のインストール時、依存してるモジュールもいくつかインストールされる。以下のような状態になった。
こうして再作成してインストールした PyInstaller を使ってみたところ、ウイルスとして誤検出されなかった。たしかに改善されたっぽい。
もっとも、そのうちまた誤検出されるようになってしまうかもしれない…。
_pyinstaller/pyinstaller: Freeze (package) Python programs into stand-alone executables
以下では git clone で入手しているけれど、上記のページからリポジトリを zip で入手することもできるので *1 、git を持ってない場合は zip を入手して解凍しても作業ができるのではないかと。
また、Python の wheel モジュールも必要らしいので、pip を使ってインストールしておく。
そんなわけで、以下を打った。
python -m pip install wheel git clone https://github.com/pyinstaller/pyinstaller.git cd pyinstaller cd bootloader python ./waf distclean all cd .. pip install .
巷の解説ページでは、作成された PyInstaller のインストール操作として、python setup.py install を紹介してる事例が多かったけれど、自分の環境でソレをすると何故かエラーになってしまった。エラーメッセージの中に、「"pip install ." を使え」と書いてあったので試してみたところインストールができた。
PyInstaller のインストール時、依存してるモジュールもいくつかインストールされる。以下のような状態になった。
(venv310) D:\...> pip list Package Version ------------------------- -------- altgraph 0.17.4 packaging 24.0 pefile 2023.2.7 pip 24.0 pyinstaller 6.7.0 pyinstaller-hooks-contrib 2024.6 pywin32-ctypes 0.2.2 setuptools 70.0.0
こうして再作成してインストールした PyInstaller を使ってみたところ、ウイルスとして誤検出されなかった。たしかに改善されたっぽい。
もっとも、そのうちまた誤検出されるようになってしまうかもしれない…。
*1: 「Code」と書かれた緑色のボタンをクリックすると、「Download ZIP」と言う項目がある。
[ ツッコむ ]
#2 [prog] MSYS2起動ファイルについてメモ
MSYS2 + MinGW64 をDOS窓上(cmd.exe)で使えるようにしたいと思って、そのあたりを少し調べていたのでメモ。
MSYS2インストールフォルダの下に、以下の起動ファイルがある。ちなみに、一般的には C:\msys64\ に MSYS2 をインストールするだろうけど、自分の環境では D:\msys64\ にインストールしてある。
--help をつけて起動すれば、オプションが表示される。
既にDOS窓を開いてる状態で、この起動ファイルを呼び出せば、MSYS2 + MinGW64が使える状態になる。
ただ、bash も起動してしまう…。cmd.exe のままにする方法はないのだろうか…?
MSYS2インストールフォルダの下に、以下の起動ファイルがある。ちなみに、一般的には C:\msys64\ に MSYS2 をインストールするだろうけど、自分の環境では D:\msys64\ にインストールしてある。
D:\msys64\msys2_shell.cmd
--help をつけて起動すれば、オプションが表示される。
> D:\msys64\msys2_shell.cmd --help Usage: msys2_shell.cmd [options] [login shell parameters] Options: -mingw32 | -mingw64 | -ucrt64 | -clang64 | -msys[2] Set shell type -defterm | -mintty | -conemu Set terminal type -here Use current directory as working directory -where DIRECTORY Use specified DIRECTORY as working directory -[use-]full-path Use full current PATH variable instead of trimming to minimal -no-start Do not use "start" command and return login shell resulting errorcode as this batch file resulting errorcode -shell SHELL Set login shell -help | --help | -? | /? Display this help and exit Any parameter that cannot be treated as valid option and all following parameters are passed as login shell command parameters.
既にDOS窓を開いてる状態で、この起動ファイルを呼び出せば、MSYS2 + MinGW64が使える状態になる。
D:\msys64\msys2_shell.cmd -mingw64 -here -no-start
ただ、bash も起動してしまう…。cmd.exe のままにする方法はないのだろうか…?
◎ batファイルを書いた :
以下は自分の環境に限定した話。以下のbatファイルを、PATH が通っている D:\home\bin\ に作っておいた、とメモしておく。
msys2_shell.bat の内容は以下。msys2_shell.cmd を呼び出しているだけ。
mingw64.bat の内容は以下。
mingw64oncmd.bat の内容は以下。環境変数 PATH と MSYSTEM の設定だけしている。bash は起動しないが、これでコンパイル等できるのかどうかは確認してない…。
mingw32.bat ... 現在のディレクトリでbashを起動。 mingw64.bat ... 現在のディレクトリでbashを起動。 mingw64oncmd.bat ... 現在のディレクトリで、環境変数PATHとMSYSTEMだけ設定。bashを起動しない。 msys2_shell.bat ... 素の msys2_shell.cmd を呼び出す。オプションもそのまま渡す。
msys2_shell.bat の内容は以下。msys2_shell.cmd を呼び出しているだけ。
@set MSYS2DIR=D:\msys64 @call %MSYS2DIR%\msys2_shell.cmd %1 %2 %3 %4 %5 %6 %7 %8 %9
mingw64.bat の内容は以下。
@echo off set MSYS2DIR=D:\msys64 CHCP 65001 SET MSYS=winsymlinks:lnk CALL "%MSYS2DIR%\msys2_shell.cmd" -mingw64 -defterm -here -no-start
- -mingw64 を渡して、MinGW64 が使えるようにしている。
- -defterm で、DOS窓上での利用を指定。mintty は起動しない。
- -here で、現在のディレクトリをカレントディレクトリにするように指定。
mingw64oncmd.bat の内容は以下。環境変数 PATH と MSYSTEM の設定だけしている。bash は起動しないが、これでコンパイル等できるのかどうかは確認してない…。
@echo off chcp 65001 set MSYS2DIR=D:\msys64 set ADDPATH=D:\home\YOURNAME\prefix\bin set ADDPATH=D:\home\YOURNAME\bin set ADDPATH=%ADDPATH%;%MSYS2DIR%\mingw64\bin set ADDPATH=%ADDPATH%;%MSYS2DIR%\usr\local\bin set ADDPATH=%ADDPATH%;%MSYS2DIR%\usr\bin set ADDPATH=%ADDPATH%;%MSYS2DIR%\bin @rem set ADDPATH=%ADDPATH%;C:\Windows\System32 @rem set ADDPATH=%ADDPATH%;C:\Windows @rem set ADDPATH=%ADDPATH%;C:\Windows\System32\wbem @rem set ADDPATH=%ADDPATH%;C:\Windows\System32\WindowsPowerShell\v1.0 set ADDPATH=%ADDPATH%;%MSYS2DIR%\usr\bin\site_perl set ADDPATH=%ADDPATH%;%MSYS2DIR%\usr\bin\vendor_perl set ADDPATH=%ADDPATH%;%MSYS2DIR%\usr\bin\core_perl set ADDPATH=%ADDPATH%;D:\home\YOURNAME\gocode\bin set PATH=%ADDPATH%;%PATH% set MSYSTEM=MINGW64 @rem WindowsのPATHを引き継ぐかどうか @rem set MSYS2_PATH_TYPE=inherit echo # Add PATH echo %ADDPATH% echo. echo # env echo MSYSTEM=%MSYSTEM% echo MSYS2_PATH_TYPE=%MSYS2_PATH_TYPE% @echo on @rem bash
◎ 参考ページ :
[ ツッコむ ]
以上、1 日分です。