pyminizipによりzipファイルにパスワードを設定する【Python】 | ジコログ

pyminizipによりzipファイルにパスワードを設定する【Python】

pyminizipによりzipファイルにパスワードを設定する【Python】 プログラミング

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")

これで警告が非表示になったはずです。

タイトルとURLをコピーしました