我正在尝试使用使用PushBullet.py
的python-magic
,dependencies又使用libmagic
。
我已按照{{3}}说明安装了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
或 cygz.dll
加入C:\Python27\
并将其重命名为{{ 1}}我收到以下错误:
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
我在Windows 7 64bit上运行Python 32bit 2.7.8(今天全新安装以尝试解决此问题)。
有谁知道如何解决问题?
编辑:尝试了另外5台不同的Windows计算机,所有5台计算机都有相同的问题。答案 0 :(得分:2)
我遇到了与python-magic相同的问题,并通过修复magic.py
文件(我的电脑中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 repository已解决了这个问题。
<强> EDIT2:强>
这些是我在我的机器上使PushBullet.py
工作的步骤:
PushBullet.py
(pip
); pip install PushBullet.py
libmagic
C:\cygwin\bin\
添加到PATH
环境变量; magic.py
文件,如上所述。 (就我而言,错误发生在第139行)答案 1 :(得分:1)
从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( for Cygwin!不是Windows版)的 Python 和 python-magic 。
将DLL复制到系统目录是无稽之谈,不要这样做。重命名它们是 uber -nonsense。您是如何期望它可以工作的?每个库都是特定的,您只需将其重命名即可更改其内部工作方式。
我已经使用了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
库
我再次执行它并且瞧 - 我有#34; Hello world!&#34;我手机上的留言。完成。
再说一遍:我已经从Cygwin的shell中执行了它(zsh,但我猜你会bash
),而不是来自Windows控制台。我也没有使用Python for Windows而是使用Cygwin的版本。 不要混用Windows和Cygwin可执行文件!
所以愚蠢的步骤将是:
setup.exe
python
和python-magic
C:\cygwin64\bin\bash.exe --login -i
,例如从&#34;运行&#34;对话框或Windows控制台)pip
(例如参见Pip install not functioning on windows 7 Cygwin install)pip install pushbullet.py
python testing_script.py
或仅testing_script.py
如果它包含shebang行且可执行感谢您提供有用库的提示:)
答案 2 :(得分:0)
您不能混用Cygwin和MSVCRT二进制文件。因此,为了在Windows Python中使用python-magic,你必须得到一个Windows编译的libmagic并修复magic.py才能找到libmagic DLL。
否则,如果你想按原样使用Cygwin的python-magic,你需要使用Cygwin的python包。