pythonソフトはexe化ではなく、難読化すべき

6月 13, 2020

動作の前提

2020年5月時点での見解です。
Windows 10
Anaconda or Miniconda
(PyCharm)
Python3

pythonのexe化はあまり良くない

pyinstallerを使うことで、pythonで書いたコードをexeファイルにすることが出来ます。しかしpyhtonの場合、exeファイルにするのは良い選択肢だとは思えません。c++やc#などはexe化するのが常識なのですが、pythonファイルをexe化すると、起動がとても遅くまります。またファイルのサイズも大きくなってしまいます。大抵の人は起動の遅さにガッカリしてしまうと思われます。

pythonは難読化するのがおすすめ

Pythonは難読化するという方法があります。難読化すればコードが守られます。難読化するときは、pyarmorというパッケージを使います。難読化した場合のデメリットとして、ローカルの環境にpython自体をインストールする必要があるということです。この場合、ユーザーのPCにMinicondaをインストールしてもらうのが、現実的だと思います。もしくは、USBにMiniconda及びpythonの難読化したコードを入れて、ユーザに実行してもらうという方法もできます。(USBを使う場合は、読み込み速度が早いUSBの方が良いです。)

実行手順

// pyarmorのインストール
$ pip install pyarmor

// pythonコードを難読化します
$ pyarmor obfuscate test.py

難読化すると、distフォルダが作成されます。test.pyを難読化すると、test.pyで読み込まれるその他のpythonファイルも同時に難読化されます。

難読化したコードの実行

少し面倒です。exeファイルならダブルクリックで起動出来ますが、pyファイルなので、ローカルPCにpythonが入っている必要があります。しかも、Anacondaを使って開発している場合、仮想環境が基本なので、仮想環境の下で実行してやる必要があります。PyCharmを使っている場合は、Terminalから以下を実行してください。

(base) > python ./dist/test.py

または、ウィンドウズボタンを押した後「Ana」と入力して、Enterを押して下さい。Anaconda Promptが開かれますので、ディレクトリを適切に移動してから、上と同様に python ./dist/test.py と入力すると難読化したpythonコードを実行できることを確認できます。

ユーザーに難読化したコードを渡す場合

MinicondaをユーザーのPCにインストール(コピペでも可)してもらい、PATHを設定すれば難読化したPythonのコードを渡すことが出来ます。さらに、バッチファイルを作成して、バッチファイルからMinicondaの仮想環境を起動してpythonを実行するという方法も考えられます。

難読化したコードに有効期限を設ける

pyarmorの機能の一つに難読化したコードに有効期限を設定することができます。こんな感じです。

$ pyarmor licenses --expired 2020-02-18 license_exp20200218

Python

Posted by パソコンの先生