Pythonには、zip関数が用意されています。
単純な圧縮・解凍であれば、このzip関数で十分です。
しかし、このzip関数ではパスワードが設定できません。
ただ、このパスワード付きZIPに関しては様々な意見があるでしょう。
「パスワード付きZIPは廃止」という意見もあるようです。
それは、あくまでビジネス慣行の話になりますけどね。
そうは言っても、zipファイルにパスワードを付けることはなくならないでしょう。
有料で販売したモノにパスワードを付けるのは、かなり有効です。
それもプログラムを利用すれば、個別にパスワードを設定できるわけですから。
つまり、ユーザ毎などにパスワードを一意に設定できるのです。
これをシステムで管理していれば、パスワードの流出元を特定できます。
そう考えれば、zipファイルへのパスワード設定はまだまだ活躍の場があります。
そのようなときに利用できるのが、pyminizipです。
本記事の内容
- pyminizipとは?
- pyminizipのシステム要件
- pyminizipのインストール
- pyminizipの動作確認
それでは、上記に沿って解説していきましょう。
pyminizipとは?
pyminizipとは、Pythonのライブラリとして公開されています。
また、pyminizipはMinizipのPython用Wrapperです。
Minizip
http://www.winimage.com/zLibDll/minizip.html
要するに、 pyminizipはMinizipをPythonから扱えるようしたモノと言えます。
なお、MinizipはC言語で開発されています。
機能としては、zipファイルの圧縮・解凍が可能です。
そして、Pythonの組み込み関数と大きく異なるのは、パスワード設定ができるという点です。
シンプルですけど、使い方によっては有用なライブラリとなります。
ただ、イマイチ普及はしていません。
パスワード設定に関する需要が、世間的にどのようなモノかはわかりません。
しかし、その需要以前にpyminizipのシステム要件に問題があるように感じます。
そのシステム要件について、以下で説明します。
pyminizipのシステム要件
pyminizipの最新バージョンは、0.2.4となります。
この最新バージョンは、2019年1月11日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
ここまでは、他のライブラリとは変わりません。
問題となるのは、次の2点です。
- Pythonバージョン
- Microsoft C++ Build Tools
下記でそれぞれを説明します。
Pythonバージョン
PyPI上の公式ページ
https://pypi.org/project/pyminizip/
上記ページでは、以下の表示となっています。
「Programming Language」に注目してください。
「Python :: 2」と記載されています。
これは、Python 2系のみサポートということになります。
これを見たら、普通は利用できるとは思いません。
念のため、GitHub上のページでsetup.pyを確認しましょう。
https://github.com/smihica/pyminizip/blob/master/setup.py
PyPI上での表記と同じです。
setup.pyの情報をPyPIでも表示しているので、それは当然のことですね。
結論から言います。
おそらく、ライブラリ作成者の記載漏れだと思います。
実際、Python 3系で動作確認までできています。
ちなみに、動作確認したPythonのバージョンは以下。
>python -V Python 3.9.1
このバージョンで問題ないなら、Python 3系はすべてイケるはずです。
Microsoft C++ Build Tools
Microsoft C++ Build Toolsは、マイクロソフト製のC、C++、C++/CLI用統合開発環境 (IDE) のことです。
ただ、pyminizipの公式ページにはMicrosoft C++ Build Toolsが必要とはどこにも書いていません。
実際、pyminizipのインストールでのトラブルがあるようです。
そりゃ、システム要件として記載されていませんからね。
では、なぜMicrosoft C++ Build Toolsが必要だと言えるのか?
それは、Minizipです。
「pyminiziはMinizipのPython用Wrapper」と書きました。
MinizipはC言語で開発されていましたね。
ということは、Cが動く環境が必要になります。
よって、Microsoft C++ Build Toolsのインストールが必要です。
Microsoft C++ Build Toolsのインストールに関しては、以下の記事で解説しています。
こちらをもとに環境を準備してください。
pyminizipのインストール
最初に、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.0.1 setuptools 53.1.0
次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip
では、pyminizipのインストールです。
pyminizipのインストールは、以下のコマンドとなります。
pip install pyminizip
インストールは、若干時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ------- pip 21.0.1 pyminizip 0.2.4 setuptools 53.1.0
パッケージとしては、pyminizipの最新版だけインストールされました。
最後に、pyminizipの動作確認を行いましょう。
pyminizipの動作確認
以下が、動作確認用のサンプルコードです。
import pyminizip src = "test.csv" pyminizip.compress(src, "", "test.zip", "passdesu", 0)
実行すると、同じディレクトリ上にtest.zipが作成されます。
このtest.zipを解凍してみましょう。
そうすると、以下が表示されます。
パスワードに「passdesu」を入力すると、解凍が成功します。
もちろん、それ以外を入力すると次のようにエラーになります。
問題なくzipファイルにパスワード設定ができています。
なお、上記コードを実行すると次のような警告が出ます。
DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats
詳細は「DeprecationWarning」で検索してみてください。
現時点では、エラーで動かないとかはありません。
あくまで、警告です。
この警告が邪魔で消したいなら、以下のコードを追加してみてください。
import warnings warnings.simplefilter("ignore")
これで警告が非表示になったはずです。