exe化


[記事全体の目次へ移動](https://qiita.com/hijpa/items/056acaa13e935590fdc2)

# まとめてBGMを暗号化
<details><summary>ここをクリックしてください</summary>

実行するとtxtファイルに暗号キーが保存されます。
暗号キーは複合化する際に必要です。

.mp3を暗号化します。

.mp3をpyファイルと同じ場所において実行してください。

```python:
import os
from cryptography.fernet import Fernet

# 暗号化キーの生成（既存のキーを使用する場合はこの部分を省略）
key = Fernet.generate_key()
cipher_suite = Fernet(key)
print(f"Generated Key: {key.decode()}")

# 暗号化キーを保存（必要に応じて）
with open('暗号キー.txt', 'wb') as key_file:
    key_file.write(key)

# スクリプトが存在するフォルダのパスを取得
folder_path = os.path.dirname(os.path.abspath(__file__))
output_folder = os.path.join(folder_path, "BGM")

# 保存先フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# フォルダ内のすべてのファイルを暗号化
for filename in os.listdir(folder_path):
    if filename.endswith(('.mp3')):
        with open(os.path.join(folder_path, filename), 'rb') as file:
            file_data = file.read()
            encrypted_data = cipher_suite.encrypt(file_data)
            with open(os.path.join(output_folder, filename + '.enc'), 'wb') as encrypted_file:
                encrypted_file.write(encrypted_data)

print("すべて暗号化されました。")


```
</details>

# BGMを複合化

<details><summary>ここをクリックしてください</summary>

input_folder = パス
暗号化した際に作られたフォルダのパスを貼り付けます。

key = b"暗号キー"
暗号化した際に作られた暗号キーを貼り付けます。

OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
このエラーが出たら、パスの前にｒをつけます。r""　

```python:

import pygame
import sys 
from pygame.locals import *
import os
from cryptography.fernet import Fernet
import io

pygame.init()
screen = pygame.display.set_mode((160,160))
pygame.display.set_caption("decrypted")

decrypted_list = []
sound_num = 0
sound_on = 0
# ここにフォルダのパスを貼り付ける。
input_folder = パス

# 暗号化キーを使用して復号化
# フォルダ内のすべてのファイルを暗号化
for filename in os.listdir(input_folder):
    if filename.endswith(('.enc')):
        with open(os.path.join(input_folder, filename), 'rb') as file:
            encrypted_data = file.read()
            key = b"暗号キー"
            cipher_suite = Fernet(key)
            decrypted_data = cipher_suite.decrypt(encrypted_data)
            decrypted_list.append(decrypted_data)
sounds = [pygame.mixer.Sound(io.BytesIO(decrypted_data)) for decrypted_data in decrypted_list]
clock = pygame.time.Clock()
running = True
while running:
    clock.tick(60)
    if sound_on == 0:
        for sound in sounds:
            sound.stop() # すべての音楽を停止
        sounds[sound_num].play(-1) # 新しい音楽を再生
        sound_on = 1
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key == K_z:
                sound_num = (sound_num + 1) % len(sounds)
                sound_on = 0
            elif event.key == K_x:
                sound_num = (sound_num - 1) % len(sounds)
                sound_on = 0


```
</details>

# exe化する

<details><summary>ここをクリックしてください</summary>

**1.** PyInstallerをインストールする。

pip install pyinstaller

**2.** pyファイルがあるフォルダに移動する。

cd パス
cd/d パス

**3.** pyファイルをexe化する。

pyinstaller ファイル名

**4.** distフォルダーがexe化したファイルの入っているフォルダーです。

**5.** データの入ったフォルダをexe化したファイルと同じところに置く。

# 参考サイト


[PyinstallerでPythonプログラムをexe化する手順書（Windows編）](https://qiita.com/nal_dal_dere/items/95e173068af399e61981)

[Pythonファイルをexe化する方法｜Pyinstallerの実例付き](https://itc.tokyo/python/python-exe/)

[Pythonをexe化する方法（Pyinstaller・Nuitka）](https://qiita.com/HALBAL/items/7d030e2e6647200b9d77)

[【PyInstallerの使い方】Pythonでの実行ファイル作成（exe化）方法を徹底解説！](https://pythonsoba.tech/pyinstaller/)

[[Python] PyInstallerで複数ファイルを一つのexeにする方法](https://af-e.net/pyinstaller-multiple-files/)
</details>