MIMEタイプ取得可能なpython-magicのインストール

MIMEタイプ取得可能なpython-magicのインストール プログラミング

「PythonでMIMEタイプを判別したい」
「Pythonでfileコマンドと同じようなことをしたい」

このような場合には、python-magicがオススメです。
この記事では、python-magicについて解説しています。

本記事の内容

  • python-magicとは?
  • python-magicのシステム要件
  • python-magicのインストール
  • python-magicの動作確認

それでは、上記に沿って解説していきます。

python-magicとは?

python-magicは、ファイルタイプを識別するPythonライブラリです。
Cで開発されたlibmagicのラッパーと言えます。

ファイルの種類を確認する際、拡張子を信用するのは危険です。
拡張子なんていくらでも偽装できます。

しかし、python-magicを使えば、Python上でもそのような偽装を見破ることが可能となります。
つまり、python-magicは本当のファイル種別を判別できるのです。

以上、python-magicについて説明しました。
次は、python-magicのシステム要件を確認します。

python-magicのシステム要件

現時点(2022年2月末)でのpython-magicの最新バージョンは、0.4.25となります。
この最新バージョンは、2022年2月2日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 2.7
  • Python 3.5
  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

幅広いバージョンに対応しています。
しかし、利用する側は常に以下のPython公式開発サイクルを意識しておきましょう。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

現時点(2022年2月末)であれば、Python 3.7以降の利用がベターと言えます。
なお、Python 3.10はpython-magicのサポート対象に記載されていません。
しかし、Python 3.10でも問題なく利用できます。

ここまで確認したシステム要件は、特に複雑でも難しくもありません。
ただ、libmagic(Cライブラリ)が必須であることは少し面倒です。

各OS毎にインストール方法が異なります。
下記では、各OS毎のインストール方法を説明します。

Debian/Ubuntu

まずは、libmagic1のインストール状況を確認してみましょう。
確認する方法は、2つあります。

1つは、fileコマンドの有無を確認する方法です。
次のようにfileコマンドが動けば、libmagic1はインストール済みとなります。

$ file -v
file-5.38
magic file from /etc/magic:/usr/share/misc/magic

もう一つは、インストール済みパッケージを確認する方法です。
確認は、次のコマンドで可能です。

apt list --installed libmagic1

複数台で試した結果、次のような結果でした。

$ apt list --installed libmagic1
一覧表示... 完了
libmagic1/groovy,now 1:5.38-5 amd64 [インストール済み、自動]

高い確率で、libmagic1はインストール済みです。
未インストールの場合は、以下のコマンドでインストールできます。

sudo apt-get install libmagic1

Windows

Windowsの場合は、まとめてインストールすることになります。
利用するコマンドは、以下。

pip install python-magic-bin

上記コマンドでは、libmagicのバイナリもまとめてpython-magicをインストールします。

OSX

macOSの場合は、どちらかのコマンドを利用します。

brew install libmagic
port install file

以上、python-magicのシステム要件を説明しました。
次は、python-magicをインストールします。

python-magicのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.0.3
setuptools 60.9.3
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、python-magicのインストールです。
python-magicのインストールは、以下のコマンドとなります。

pip install python-magic

インストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package      Version
------------ -------
pip          22.0.3
python-magic 0.4.25
setuptools   60.9.3
wheel        0.36.2

python-magicには、依存するパッケージがありません。
そのため、libmagicの要件さえ満たせば既存環境に容易に導入できます。

以上、python-magicのインストールを説明しました。
次は、python-magicの動作確認を行います。

python-magicの動作確認

python-magicの動作確認を行うために、次のような画像を用意します。

それぞれの拡張子の画像を用意するだけです。
ただし、一つだけ偽物を用意します。

上記では、dog_fake.jpgが偽物になります。
dog_fake.jpgは、dog.pngの拡張子を変更したモノです。

python-magicが、dog_fake.jpgをどのように判定するのかも検証します。
検証に用いるのは、次のコードです。

import magic

print(magic.from_file("file/dog.png", mime=True))
print(magic.from_file("file/cat.jpeg", mime=True))
print(magic.from_file("file/cat2.jpg", mime=True))
print(magic.from_file("file/bird.gif", mime=True))
print(magic.from_file("file/dog_fake.jpg", mime=True))

コードの内容は、これ以上ないほどにシンプルです。
上記を実行した結果は、以下。

image/png
image/jpeg
image/jpeg
image/gif
image/png

注目ポイントは、2つです。

1つ目は、jpgはjpeg扱いになるということです。
当たり前ですが、知らない人も中にはいるかもしれません。

2つ目は、python-magicを騙すことはできないということです。
dog_fake.jpgをpngとして判定しています。

MIMEタイプの判定には、python-magicを問題なく使えることが確認できました。

以上、python-magicの動作確認を説明しました。

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