私はDebian wheezyを実行しており、システムパッケージからmitmproxyをインストールし、pipを使用してpushbullet.py( https://github.com/randomchars/pushbullet.py )をインストールしました。
apt-get install mitmproxy
pip install pushbullet.py
次のように、Python コマンドラインからインポートすると、Pushbullet が機能します。
$ python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pushbullet import PushBullet
>>> pb=PushBullet(myapikeyremoved)
>>>
しかし、mitmproxy スクリプト内から pushbullet モジュールをインポートしようとすると、モジュールが見つかりません。
$ echo "from pushbullet import PushBullet" > mypb.py
$ mitmproxy -s mypb.py
Script load error: Traceback (most recent call last):
File "/usr/lib/python2.6/dist-packages/libmproxy/script.py", line 48, in load
execfile(path, ns, ns)
File "mypb.py", line 1, in <module>
from pushbullet import PushBullet
ImportError: No module named pushbullet
これで、pip は pushbullet.py とその依存関係 python-magic、requests、backports.ssl-match-hostname を /usr/local/lib/python2.7/dist-packages/ にインストールしました。cmdline python は pip でインストールされたパッケージを見つけたようですが、mitmproxy は何らかの理由で見つけることができません。
そのため、PYTHONPATH またはシステム パスを介してパスを追加しようとしましたが、まだ何か間違っているに違いないと思います。
$ cat mypb.py
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')
from pushbullet import PushBullet
pb=PushBullet(myapikeyremoved)
$ mitmproxy -s mypb.py
Script load error: Traceback (most recent call last):
File "/usr/lib/python2.6/dist-packages/libmproxy/script.py", line 48, in load execfile(path, ns, ns)
File "mypb.py", line 4, in <module>
pb=PushBullet(myapikeyremoved)
File "/usr/local/lib/python2.7/dist-packages/pushbullet/pushbullet.py", line 26, in __init__
self.refresh()
File "/usr/local/lib/python2.7/dist-packages/pushbullet/pushbullet.py", line 223, in refresh
self._load_devices()
File "/usr/local/lib/python2.7/dist-packages/pushbullet/pushbullet.py", line 32, in _load_devices
resp_dict = resp.json()
TypeError: 'dict' object is not callable
cmdline pythonを介してすべてが機能し、mitmproxy内からスクリプトとしてロードされたときに失敗する理由と、それを修正する方法を誰でも明らかにできますか? pip経由でインストールされたモジュールはどのようにロードされるべきですか?