10

Windows上のいくつかのファイルのmimeタイプを取得する必要があるため、python-magic(32ビットPython 2.7.3に)インストールしました。UNIXライブラリ
に依存します。作成者は、gnuwin32プロジェクトから取得するように 指示します。そこで、ファイルをフォルダーに保存し、そのフォルダーをシステムに追加しました。 これで、メソッドを実行すると、欠落しているファイルの例外が発生します。 magic
regex2.dllzlib1.dllmagic1.dllPATH
magic

import magic
print(magic.Magic())

Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 367, in <module>
  test_magic()
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 364, in test_magic
  print(magic.Magic())
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 52, in __init__
  magic_load(self.cookie, magic_file)
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 188, in magic_load
  return _magic_load(cookie, coerce_filename(filename))
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 139, in errorcheck
  raise MagicException(err)
magic.MagicException: could not find any magic files!

DLLはPATHにあり、デバッグを試みmagic1.dllて正しく配置されていますが、ライブラリ内のどこかで例外がスローされます。私が見つけ
たパッケージの中と。それらを同じフォルダに置いて、乗りました gnuwin32magicmagic.mgcWindowsError: [Error 126]

libmagic = None  
# Let's try to find magic or magic1  
dll = ctypes.util.find_library('magic') or ctypes.util.find_library('magic1')  

# This is necessary because find_library returns None if it doesn't find the library
if dll:
    libmagic = ctypes.CDLL(dll)

magicこれは明らかに、Pythonがファイルをプレーンテキストであるdllとして開こうとするために発生します。コード内のファイル名に追加.dllした後、私は同じを取得しますmagic.MagicException: could not find any magic files!
どのファイルがありませんか?

アップデート:

C:\Users\Admin>file C:\123.zip -m magic
file: could not find any magic files!

C:\Users\Admin>file C:\123.zip -m "C:\@DEV\@LIB\@Magic\GetGnuWin32\bin\magic"
C:\123.zip; ASCII text, with no line terminators

C:\Users\Admin>cd C:\@DEV\@LIB\@Magic\GetGnuWin32\bin

C:\@DEV\@LIB\@Magic\GetGnuWin32\bin>file C:\123.zip -m magic
C:\123.zip; ASCII text, with no line terminators

更新2(解決済み):

print(magic.Magic())
magic.MagicException: could not find any magic files!

print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>

ファイルを明示的に指定する必要がありました

4

4 に答える 4

11

将来のグーグル訪問者のために:別の解決策は、システム設定の%MAGIC%環境変数をマジックファイルを指すように設定することです。私にとっては次のとおりです。

"c:\Program Files (x86)\GnuWin32\share\misc\magic"

プログラムのパスをハードコーディングする必要はありません!

于 2015-01-30T11:13:59.767 に答える
2

ファイルへのパスmagicは、コンストラクターに明示的に渡す必要があります。

magic_object = magic.Magic(magic_file = 'path_to_magic_files/magic'))
于 2013-02-21T16:26:08.557 に答える
2

python-magicの問題は非常に一般的であるように思われるため、将来のgooglersの有効なソリューションを次に示します。ソースコードを変更せずにほとんどのソリューションをテストした後、python-magicをそのまま使用できるようにするために次のことがわかりました。

  1. 最初にGnuWin32ファイル をインストールします
  2. 環境変数MAGIC=path \ to \ gnuwin32 \ share \ misc\magicを設定します
  3. インストールされているすべての実行可能ファイル/ライブラリがPATH経由でアクセスできることを確認します
  4. pip経由でpython-magicをインストールします
于 2017-10-20T09:48:10.130 に答える
1

このパッケージをインストールしてみてください:

pip install python-magic-bin
于 2021-04-15T15:55:35.967 に答える