Python-magic has OSError: [WinError 193] error while running in 32-bit version of IDLE
Python-magic has OSError: [WinError 193] error while running in 32-bit version of IDLE
几个小时以来,我一直在尝试安装模块 python-magic,但遇到了一些问题。我正在使用 32 位版本的 Python 3.5.2 和 64 位 Windows 7.
首先,我使用了命令“pip install python-magic
”。我从 Files for Windows 项目下载了 magic1.dll、regex2.dll、zlib1.dll 和 magic,并将 os 这四个文件复制到
C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info.
我在 Windows 环境变量中将上述目录添加到 PATH 的开头。然后我打开 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
” 弹出警告。我读到 运行ning 时经常遇到后一个错误它在 64 位环境中,但我确保在 32 位 IDLE 中 运行 它并且只安装了 Python 的 32 位版本。
按照 previous Whosebug posts 的建议,我尝试将 cygmagic-1.dll、cygwin1.dll 和 cygz.dll 复制到 C:\Windows\System32,到与 magic.dll 相同的文件夹,我也尝试将 cygmagic-1.dll 重命名为 magic1.dll,但这没有任何效果。我知道其他地方说你不支持 osed 混合 Cygwin Python 和 Windows Python,但我在没有这些文件参与的情况下尝试过,但它没有那就工作吧。
我尝试将 magic.dll 重命名为 magic.exe,这允许 "import magic" 和魔术。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-魔法后,有人推荐了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' 数据文件 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),但我认为这些都不是很重要。 )
几个小时以来,我一直在尝试安装模块 python-magic,但遇到了一些问题。我正在使用 32 位版本的 Python 3.5.2 和 64 位 Windows 7.
首先,我使用了命令“pip install python-magic
”。我从 Files for Windows 项目下载了 magic1.dll、regex2.dll、zlib1.dll 和 magic,并将 os 这四个文件复制到
C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info.
我在 Windows 环境变量中将上述目录添加到 PATH 的开头。然后我打开 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
” 弹出警告。我读到 运行ning 时经常遇到后一个错误它在 64 位环境中,但我确保在 32 位 IDLE 中 运行 它并且只安装了 Python 的 32 位版本。
按照 previous Whosebug posts 的建议,我尝试将 cygmagic-1.dll、cygwin1.dll 和 cygz.dll 复制到 C:\Windows\System32,到与 magic.dll 相同的文件夹,我也尝试将 cygmagic-1.dll 重命名为 magic1.dll,但这没有任何效果。我知道其他地方说你不支持 osed 混合 Cygwin Python 和 Windows Python,但我在没有这些文件参与的情况下尝试过,但它没有那就工作吧。
我尝试将 magic.dll 重命名为 magic.exe,这允许 "import magic" 和魔术。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-魔法后,有人推荐了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' 数据文件 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),但我认为这些都不是很重要。 )