Potrzebuję uzyskać typ MIME dla niektórych plików w systemie Windows, więc mam zainstalowany python-magic
(na 32-bitowym python 2.7.3).
To zależy od biblioteki unix magic
.
Autor nakazuje uzyskać regex2.dll
, zlib1.dll
i z projektu gnuwin32. Więc zapisałem pliki w folderze i dodałem folder do mojego systemu PATH
.
Teraz kiedy wykonać magic
metod, otrzymuję wyjątek brakuje pliku:Brakujące pliki dla biblioteki `magic` na Windows
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 są w ścieżce, próbowałem debugowanie i magic1.dll
znajduje się poprawnie, ale gdzieś wewnątrz biblioteki zgłasza wyjątek.
Wewnątrz pakietu gnuwin32
znalazłem magic
i magic.mgc
. Umieściłem je w tym samym folderze, a dostał WindowsError: [Error 126]
na
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)
To oczywiście dzieje bo python próbuje otworzyć magic
jak plik DLL, który jest zwykły tekst. Po dodaniu .dll
do nazw plików w kodzie otrzymuję ten sam magic.MagicException: could not find any magic files!
.
Jakie pliki brakuje?
UPDATE:
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
UPDATE 2 (SOLVED):
print(magic.Magic())
magic.MagicException: could not find any magic files!
print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>
prostu musiał określić plik wyraźnie
Głupie pytanie, masz wznowiona wiersz polecenia po dodaniu DLL do katalogu 'PATH' i zanim wykonywany skrypt? (głupie pytanie, ponieważ najwyraźniej znasz swoją drogę wokół ctypes) – Torxed
"czy uruchomiłeś ponownie wiersz poleceń PO dodałeś DLL do PATH" - tak, zrobiłem – user2052437
Próbowałem umieścić dll w tym samym katalogu i wypróbować ctypes na tych? lub jeśli to może pomóc? Nie wiem, czy szukają bibliotek DLL w konkretnym miejscu, takim jak '. /', Ale może warto spróbować? - Cholera, po prostu ponownie przeczytaj pytanie ... już zrobiłeś .. (jestem zmęczony, 00:00 tutaj) – Torxed