[英]Pushbullet on python throws import error due to python-magic unable to find libmagic?
我正在尝试使用PushBullet.py
,它使用python-magic
,后者又使用libmagic
。
我已遵循依赖项说明并安装了Cygwin并将这三个文件复制到Windows\\system32
目录但仍然收到以下错误:
Traceback (most recent call last):
File "C:\New Python ActiveX Scripting Engine.py", line 1, in <module>
from pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\__init__.py", line 2, in <module>
from .pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\pushbullet.py", line 4, in <module>
import magic
File "C:\Python27\lib\site-packages\magic.py", line 161, in <module>
raise ImportError('failed to find libmagic. Check your installation')
ImportError: failed to find libmagic. Check your installation
如果我将cygmagic-1.dll
OR cygz.dll
放入C:\\Python27\\
并将其重命名为magic.dll
我会收到以下错误:
Traceback (most recent call last):
File "C:\New Python ActiveX Scripting Engine.py", line 1, in <module>
from pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\__init__.py", line 2, in <module>
from .pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\pushbullet.py", line 4, in <module>
import magic
File "C:\Python27\lib\site-packages\magic.py", line 143, in <module>
libmagic = ctypes.CDLL(dll)
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
如果我将cygwin1.dll
放入C:\\Python27\\
并将其重命名为magic.dll
我会收到以下错误:
Traceback (most recent call last):
File "C:\New Python ActiveX Scripting Engine.py", line 1, in <module>
from pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\__init__.py", line 2, in <module>
from .pushbullet import PushBullet
File "C:\Python27\lib\site-packages\pushbullet\pushbullet.py", line 4, in <module>
import magic
File "C:\Python27\lib\site-packages\magic.py", line 185, in <module>
magic_open = libmagic.magic_open
File "C:\Python27\lib\ctypes\__init__.py", line 378, in __getattr__
func = self.__getitem__(name)
File "C:\Python27\lib\ctypes\__init__.py", line 383, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'magic_open' not found
我在运行Python 32bit 2.7.8的Windows 7 64bit上执行此操作(今天全新安装以尝试解决此问题)。
有谁知道如何解决这个问题?
编辑:尝试了另外5台不同的Windows计算机,所有5台都有相同的问题。
我遇到了与python-magic相同的问题,并通过修复magic.py
文件中的以下行来解决它(我的PC中的C:\\Python27\\lib\\site-packages\\magic.py
):
dll = ctypes.util.find_library('magic') or ctypes.util.find_library('magic1')
由于我从Cygwin安装了libmagic
,因此DLL被命名为cygmagic-1.dll
。 所以我只是在上一行添加了另一个选择:
dll = ctypes.util.find_library('magic') or ctypes.util.find_library('magic1') \
or ctypes.util.find_library('cygmagic-1')
不要忘记将cygwin\\bin
添加到PATH
。
编辑:似乎这个问题已在GitHub存储库中解决 。
EDIT2:这是我在我的机器上运行PushBullet.py
遵循的步骤:
PushBullet.py
通过pip
( pip install PushBullet.py
); libmagic
; C:\\cygwin\\bin\\
到PATH
环境变量中; magic.py
文件。 (就我而言,错误发生在第139行) 从traceback列表中的Windows路径,我猜你正在尝试从Windows版本的Python执行PushBullet脚本。 如果不使用Cygwin,为什么要安装? Python for Windows真的不会使用Cygwin的DLL。
您必须使用Python for Cygwin从Cygwin执行PushBullet.py
,而不是使用Python for Windows从Windows控制台执行。 这意味着执行例如bash
(类似于C:\\cygwin64\\bin\\bash.exe --login -i
)和bash
执行PushBullet脚本: python PushBullet.py
。
它预计,你已经安装了Cygwin( 适用于Cygwin!而不是Windows版本 )的Python和python-magic 。
将DLL复制到系统目录是无稽之谈,不要这样做。 重命名它们是超级 -无意义的。 您是如何期望它可以工作的? 每个库都是特定的,您不能只是重命名它来改变它在内部的工作方式。
我已经使用了PushBullet一段时间了,所以我对这个特殊的Python脚本很感兴趣。 我也在使用Cygwin多年。 所以我安装了PushBullet库:
pip install pushbullet.py
然后我创建了非常简单的脚本test.py
:
#!/usr/bin/python
from pushbullet import PushBullet
pb = PushBullet('my_access_token')
success, push = pb.push_note("Testing title", "Hello world!")
当我使用./test.py
执行它时,我收到一条错误消息,我错过了magic
库,因此我使用Cygwin的安装实用程序安装了python-magic
库。
我再次执行它瞧 - 我有“Hello world!” 我手机上的留言。 完成。
再说一遍:我已经从Cygwin的shell中执行了它(zsh,但我猜你会有bash
),而不是来自Windows控制台。 我也没有使用Python for Windows而是使用Cygwin的版本。 不要混用Windows和Cygwin可执行文件!
所以愚蠢的步骤将是:
setup.exe
python
和python-magic
C:\\cygwin64\\bin\\bash.exe --login -i
,例如从“运行”对话框或Windows控制台执行) pip
(参见例如Pip install在Windows 7 Cygwin安装上不起作用 ) pip install pushbullet.py
python testing_script.py
或者只是testing_script.py
如果它包含shebang行并且是可执行的 谢谢你提示有用的库:)
你不能混合使用Cygwin和MSVCRT二进制文件。 因此,为了在Windows Python中使用python-magic,你必须得到一个Windows编译的libmagic并修复magic.py来找到libmagic DLL。
否则,如果你想按原样使用Cygwin的python-magic,你需要使用Cygwin的python包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.