1

PushBullet.pywhich uses python-magicwhich uses を使用しようとしていますlibmagic

依存関係の指示に従い、Cygwin をインストールし、3 つのファイルを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

編集

ORを入れて名前を変更すると、次のエラーが発生します。cygmagic-1.dll cygz.dllC:\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.dllC:\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台すべてが同じ問題を抱えています。

4

3 に答える 3

2

私は python-magic で同じ問題を抱えていましたが、magic.pyファイル内の次の行を修正して解決しました(C:\Python27\lib\site-packages\magic.py私のPC内):

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私のマシンで作業するために私が従った手順です:

  1. ( )PushBullet.py経由でインストールします。pippip install PushBullet.py
  2. Cygwinlibmagicからインストールします。
  3. 環境変数に追加C:\cygwin\bin\します。PATH
  4. 上で説明したようにファイルを変更しmagic.pyます。(私の場合、エラーは139行目にありました)
于 2014-09-12T18:41:05.207 に答える
1

トレースバック リストの Windows パスから、Windows バージョンの Python から PushBullet スクリプトを実行しようとしていると思います。Cygwin を使用していないのに、なぜ Cygwin をインストールしたのですか? Python for Windows は実際には Cygwin の DLL を使用しません。

PushBullet.pyPython for Windows を使用して Windows コンソールから実行するのではなく、Python for Cygwin を使用して Cygwinから実行する必要があります。つまり、たとえばbash( のようなものC:\cygwin64\bin\bash.exe --login -i) をbash実行し、PushBullet スクリプトを実行します: を意味しますpython PushBullet.py

Cygwin 用のPythonpython-magic ( Windows 版ではなく Cygwin 用) が既にインストールされていることを前提としています。

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、ライブラリが見つからないというエラー メッセージが表示されたので、 Cygwin のセットアップ ユーティリティを使用してライブラリをmagicインストールしました。python-magic

私はそれをもう一度実行し、ほら、「Hello world!」が表示されました。私の電話でメッセージ。終わり。

もう一度注意してください:bashWindowsコンソールからではなく、Cygwinのシェル(zshですが、おそらくそうでしょう)から実行しました。また、Python for Windows ではなく、Cygwin のバージョンを使用しました。Windows と Cygwin の実行可能ファイルを混在させないでください。

したがって、ばかげた手順は次のようになります。

  1. Cygwin.comsetup.exeからダウンロードして実行する
  2. インストールpythonしてpython-magic
  3. Cygwin のシェルを実行します ([スタート] メニューから [Cygwin ターミナル] を実行するかC:\cygwin64\bin\bash.exe --login -i、たとえば [実行] ダイアログまたは Windows コンソールから実行することができます)。
  4. インストールpip(たとえば、Pip install not functioning on Windows 7 Cygwin install を参照)
  5. PushBulletライブラリをインストールします。pip install pushbullet.py
  6. テスト スクリプトを準備する
  7. 実行する:python testing_script.pyまたはtesting_script.py、シバン行が含まれていて実行可能である場合のみ
  8. うまくいかない場合は、エラーを投稿してください

便利なライブラリへのヒントをありがとう:)

于 2014-08-26T19:21:12.203 に答える
0

Cygwin と MSVCRT のバイナリを混在させることはできません。したがって、Windows Python で python-magic を使用するには、Windows でコンパイルされた libmagic を入手し、magic.py を修正して libmagic DLL を見つける必要があります。

それ以外の場合、Cygwin の python-magic をそのまま使用する場合は、Cygwin の python パッケージを使用する必要があります。

于 2014-08-15T15:09:18.810 に答える