Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonMagic在32位版本的IDLE中运行时出现OSError:[WinError 193]错误_Python_Python Magic - Fatal编程技术网

PythonMagic在32位版本的IDLE中运行时出现OSError:[WinError 193]错误

PythonMagic在32位版本的IDLE中运行时出现OSError:[WinError 193]错误,python,python-magic,Python,Python Magic,我已经试着安装这个模块几个小时了,我遇到了一些问题。我正在使用32位版本的Python 3.5.2和64位Windows 7 首先,我使用命令“pip install python magic”。我从Windows项目的文件中下载了magic1.dll、regex2.dll和zlib1.dll以及magic,并将这四个文件复制到 C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-i

我已经试着安装这个模块几个小时了,我遇到了一些问题。我正在使用32位版本的Python 3.5.2和64位Windows 7

首先,我使用命令“
pip install python magic
”。我从Windows项目的文件中下载了magic1.dll、regex2.dll和zlib1.dll以及magic,并将这四个文件复制到

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]指定的模块找不到

我读到“magic”文件应该有扩展名.dll,所以我重命名了它。这导致Windows出现弹出警告:“C:\Program Files(x86)\Python35-32\Lib\site packages\magic.dll不是为在Windows上运行而设计的,或者包含错误”,而Python则显示“OSError:[WinError 193]%1不是有效的Win32应用程序””。我了解到,在64位环境中运行它时,通常会遇到后一个错误,但我确保在32位空闲状态下运行它,并且只安装了32位版本的Python

按照的建议,我尝试将cygmagic-1.dll、cygwin1.dll和cygz.dll复制到C:\Windows\System32,与magic.dll复制到同一个文件夹中,并且尝试将cygmagic-1.dll重命名为magic1.dll,但没有任何效果。我知道其他地方说你不应该混合使用Cygwin Python和Windows Python,但我在没有这些文件参与的情况下尝试了它,当时它也不起作用

我尝试将magic.dll重命名为magic.exe,这允许“导入magic”和magic。
magic(magic\u file=r'C:\Program Files(x86)\Python35-32\Lib\site packages\python\u magic-0.4.12-py3.5.egg info\magic.exe)的响应为“”。但是,当我尝试使用magic.from_文件(r'C:\Program Files(x86)\Python35-32\Lib\site packages\README.txt)进行测试时,出现了错误magic.magiceException:b'找不到任何magic文件我认为将其重命名为magic.exe肯定是错误的,但值得一试

在我放弃python魔法后,有人推荐了一个。我下载了它并将pymagic文件夹放在我的站点包目录中。当我尝试导入pymagic.pymagic时,它告诉我StringIO模块不存在,推荐人告诉我这是因为StringIO来自Python2。我将所有提到StringIO的内容都改为io,并尝试使用命令
pymagic.pymagic.identify_文件(r'E:\Pictures\picture.jpg')


这就产生了一个错误
TypeError:startswith first arg必须是字节或字节元组,而不是str。
我对Python的os、io等模块了解不够,不知道如何进行修改以使其正常工作。有人能就如何让pythonmagic或pymagic工作,或任何其他基于文件头识别文件的模块提出建议吗?我知道这个问题被问了很多次,但之前的答案对我来说并不合适。

您是否调用了“magic”数据文件
magic
,并将其放在与
magic1.dll
相同的文件夹中

按照你的指示,我能够重现与你相同的错误。通过使用,我可以看出您出现第一个错误的原因似乎是Python试图像加载库一样加载magic数据文件

然后我将magic数据文件重命名为
magic_data
,重新启动IDLE,它就工作了。然后我可以使用
magic
识别一个文件:

win32上的Python 3.4.3(v3.4.3:9b73f1c3e601,2015年2月24日,22:43:06)[MSC v.1600 32位(英特尔)] 有关详细信息,请键入“copyright”、“credits”或“license()”。 >>>进口魔术 >>>fn=r'C:\Python34\Lib\site packages\python\u magic-0.4.12-py3.4.egg info\magic\u data' >>>m=magic.magic(magic_文件=fn) >>>m.from_文件(r'C:\Python34\Lib\site packages\python_magic-0.4.12-py3.4.egg info\zlib1.dll') '适用于MS Windows的PE32可执行文件(DLL)(控制台)英特尔80386 32位'

(我使用的是不同版本的Python(3.4)和不同版本的Windows(10),但我认为这些并不重要。)

效果非常好。另外,我遇到了GitHub文档警告的“WindowsError:exception:access violation writing 0x00000000”错误,并通过从我的路径中删除C:\cygwin\bin解决了该错误。