python - 由于 python-magic 无法找到 libmagic,Python 上的 Pushbullet 会引发导入错误?

标签 python python-2.7 cygwin ipython-magic libmagic

我正在尝试使用 PushBullet.py它使用 python-magic它又使用libmagic

我已关注dependencies说明并安装了 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 32 位 2.7.8 的 Windows 7 64 位上执行此操作(今天全新安装以尝试解决此问题)。

有谁知道如何解决这个问题吗?

编辑:在另外 5 台不同的 Windows 计算机上进行了尝试,所有 5 台计算机都有相同的问题。

最佳答案

我在使用 python-magic 时遇到了同样的问题,并通过修复 magic.py 文件 (C:\Python27\lib\site-packages\magic.txt) 中的以下行解决了该问题。 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 上得到解决。 .

编辑2: 以下是我让 PushBullet.py 在我的机器上工作所遵循的步骤:

  1. 通过pip安装PushBullet.py(pip install PushBullet.py);
  2. Cygwin 安装 libmagic ;
  3. C:\cygwin\bin\添加到PATH环境变量中;
  4. 按照我上面的说明更改 magic.py 文件。 (在我的例子中,错误出现在第 139 行)

关于python - 由于 python-magic 无法找到 libmagic,Python 上的 Pushbullet 会引发导入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25328104/

相关文章:

python - 如何为 python 3 安装所有 python 2 包?

Python, Pandas 数据框。 pd.fillna() 用于具有特定值的特定列

python - 从单词列表中删除/n - python

python请求检查文件是否正确下载

python-2.7 - 如何使用 scikit-learn 只删除多项式回归中的交互项?

bash - 指定任务的绝对路径的运行gradle会将名称解释为命令

python - 使用 Python 求解行列式而不使用 scipy.linalg.det 的代码

python : store data in file

c++ - 程序自行删除,不启动

git - 如何配置 Beyond compare 与 Git 命令行