pythonソフトはexe化ではなく、難読化すべき
動作の前提
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
