Python-magic在32位版本的IDLE中运行时出现OSError错误:[WinError 193]错误
我一直在尝试安装模块python-magic几个小时,并且遇到了一些问题。我正在使用32位版本的Python 3.5.2和64位Windows 7.Python-magic在32位版本的IDLE中运行时出现OSError错误:[WinError 193]错误
首先,我使用了命令“pip install python-magic
”。我下载magic1.dll,regex2.dll和zlib1.dll,和魔术从文件适用于Windows的项目,我的四个文件复制到
C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info.
我加入了上述目录路径的开头我Windows环境变量。然后我打开IDLE的Shell并输入“import magic
”并得到响应OSError: [WinError 126] The specified module could not be found
。
我读到“magic”文件应该有扩展名.dll,所以我重命名了它。这导致了Windows "C:\Program Files (x86)\Python35-32\Lib\site-packages\magic.dll is either not designed to run on Windows or contains an error"
和Python的弹出式警告,"OSError: [WinError 193] %1 is not a valid Win32 application
“我读到后者在64位环境中运行时遇到的错误,但我确保在32位IDLE中运行它,并且只有32位版本的Python已安装
根据previous StackOverflow posts的建议,我尝试将cygmagic-1.dll,cygwin1.dll和cygz.dll复制到C:\ Windows \ System32中,并将其复制到同一个文件夹作为magic.dll,我也尝试将cygmagic-1.dll重命名为magic1.dll,但这没有任何影响。我知道其他地方说你不应该混合Cygwin Python和Windows Python,但我试过它没有这些文件的参与,它也没有工作,然后,
我试过ren将magic.dll转换为magic.exe,并允许“导入魔法”和魔法。 Magic(magic_file=r'C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info\magic.exe') with the response "<magic.Magic object at 0x02EA0A70>". When I tried testing with magic.from_file(r'C:\Program Files (x86)\Python35-32\Lib\site-packages\README.txt'), though, I got the error magic.MagicException: b'could not find any magic files!
我认为将它重命名为magic.exe必须是错误的,但它值得一试。
我放弃了python-magic之后,有人推荐older project。我下载了它,并将pymagic文件夹放入我的站点包目录中。当我试图导入pymagic.pymagic时,它告诉我模块StringIO不存在,推荐人告诉我这是因为StringIO来自Python2。我将StringIO的所有提及更改为io并尝试执行命令pymagic.pymagic.identify_file(r'E:\Pictures\picture.jpg')
这生成了错误TypeError: startswith first arg must be bytes or a tuple of bytes, not str.
我没有足够的参与Python的os,io等模块来知道如何进行修改以使其发挥作用。任何人都可以提出有关如何获得python-magic或pymagic工作的任何建议,或者是否有任何其他模块基于其标头来标识文件?我知道这个问题已经被问了很多,但以前的答案并没有为我工作。
你打电话给'神奇'数据文件magic
,并将它放在与magic1.dll
相同的文件夹中吗?
按照您的指示,我能够重现与您一样的错误。使用Sysinternals Process Monitor,我可以看到你的第一个错误的原因似乎是Python试图加载魔术数据文件,就好像它是库。
然后,我将魔术数据文件重命名为magic_data
,重新启动IDLE,并且它工作正常。然后我可以使用magic
来识别文件:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import magic
>>> fn = r'C:\Python34\Lib\site-packages\python_magic-0.4.12-py3.4.egg-info\magic_data'
>>> m = magic.Magic(magic_file=fn)
>>> m.from_file(r'C:\Python34\Lib\site-packages\python_magic-0.4.12-py3.4.egg-info\zlib1.dll')
'PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit'
(我使用的是不同版本的Python(3.4),和不同版本的Windows(10)给你,但我不认为这些太重要了。)
完美运作。另外,我遇到了'WindowsError:异常:写入0x00000000的访问冲突'错误,GitHub文档警告并通过从我的PATH中删除C:\ cygwin \ bin来解决它。 – raincloud