みなさん、こんにちは!みやしんです!
今回はPythonコードを他人から読めないようにする「PyArmor」についてご紹介します!

秘密を知られたくないにゃ!!!
PythonやAIをもっと勉強したい方🤗

PyArmorとは?
PyArmorとは、Pythonコードを難読化して他人から読まれなくするライブラリです。
他人に知られたくない情報がスクリプトに記載されている場合はPyArmorがおススメです。
PyArmorはコマンドラインツールになります。
有料版もあるようですが、無料版で十分活用できます。
無断での商用製品への活用は禁止されているようですので、ご注意ください。
PyArmorをインストール
下記のコマンドを入れます。
> pip install pyarmor
比較的早くインストールが完了すると思います。
今回のPyArmorのバージョンを確認しておきます。
> pyarmor --version

pyarmor 7.0.2 であることが確認できました。
それでは、PyArmorを使って難読化してみましょう!
PyArmorでPythonスクリプトを難読化
今回は、簡単なPythonスクリプトを準備します。
こんなスクリプトを作ってみました。めっちゃ簡単です。
test.py
print("PyArmorで難読化成功!")
test

このスクリプトを難読化していきます。
test.pyファイルがあるフォルダまでcdコマンドで移動して以下のコマンドを入力します。
> pyarmor obfuscate test.py
ちなみに、obfuscateが難読化という意味です。
すると、こんな感じで処理が走ります。

処理を実行すると「dist」フォルダが作成されます。
test

distに移動すると、test.pyが作られています。
test/dist

distフォルダ内のtest.pyを確認してみます。

難読化されていますね!
この難読化されたPythonスクリプトを実行してみましょう!

難読化されているスクリプトでも、問題なく実行できました!
使用期限を付与することも可能!
もう一度、最初から処理をします。下記のようなコマンドを入力します。
> pyarmor licenses --expired 2022-01-01 test1
test1の部分は好きに決めてOKです。その名前でフォルダが作られます。
実行するとこんな感じです。

するとlicensesというフォルダが作られます。
test

licensesフォルダの中を覗いてみるとこんな感じです。
test/licenses

先程、命名したtest1フォルダがありますね!
最後に、先程行ったように、pyarmor obfuscateコマンドでファイルを難読化しますが、今回は下記のようにオプションを付けます。
> pyarmor obfuscate --with-license licenses/test1/license.lic test.py

すると同様に「dist」フォルダが出現し、使用期限付きで難読化することができました。
test

test/dist


使用期限付きで難読化したtest.pyを試しに実行してみます。

ちゃんと実行できました。
複数ファイルでも難読化できる
これまで1ファイルのみ難読化してきましたが、複数ファイルが存在すると全て難読化してくれます。
> pyarmor obfuscate test.py
test

test/dist

test1.pyも難読化されておりました!
サブディレクトリ内の.pyファイルも難読化する場合
次は配下サブディレクトリ内の.pyファイルも含めて難読化する方法になります。
ファイルは簡単なスクリプトを2つ準備しました!
まずはフォルダ構成はこちらです。

スクリプトはこちら!
まずは、main.py
from subdirectory.test_class import PrintClass
PrintClass = PrintClass()
a = "こんにちは!"
PrintClass.Hello(a)
続いてtest_class.py
class PrintClass():
def Hello(self, x):
print(x)
サブディレクトリまで難読化するときは下記のコマンドを実行します。
> pyarmor obfuscate --recursive main.py
実行します。

すると、これまで通りに「dist」フォルダが出現。

distフォルダ内にはmain.pyとsubdirectoryがありました。

main.pyとtest_class.pyを確認してみるとしっかり難読化されていました。
main.py

test_class.py

distフォルダ内の難読化されたmain.pyを実行してみると、しっかり動きました。

難読化と暗号化の違い
難読化は人間に読みにくくすることです。暗号化は人間に読めなくすることです。
難読化は時間を掛けて解読すれば読むことができますがかなり大変ですので普通はしないでしょう。
暗号化は鍵(キー)を持っている人のみ読むことが出来ます。
情報の機密性の高さに応じて難読化と暗号化を適切に選ぶようにしましょう!
PythonやAIをもっと勉強したい方🤗

コメント
こんにちは。
個人情報の類をコードに直接埋め込むことは避けるべきですし、仮に難読化を施したとしても個人情報保護法の対象となります。
https://it-trend.jp/encryption/article/64-0081
個人情報を含むコードもPyArmorにかければ大丈夫、というような表現は危険かと思います。
ご連絡くださりありがとうございます。直しておきます
危険な表記は削除しました。ありがとうございました。