我正在运行Debian wheezy并从系统软件包安装了mitmproxy,并使用pip pushbullet.py(https://github.com/randomchars/pushbullet.py),即
apt-get install mitmproxy
pip install pushbullet.py
当我从python cmdline导入时,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安装的模块?
答案 0 :(得分:0)
感谢Christian Rapp的评论,我进一步研究了为什么从/usr/lib/python2.6加载了mitmproxy的libmproxy。事实证明(至少在debian wheezy包中),mitmproxy shebang明确指定了python2.6:
$ head -1 /usr/bin/mitmproxy
#! /usr/bin/python2.6
这解释了为什么mitmproxy无法找到pushbullet模块;它正在寻找2.6目录。
我认为当我明确加载模块时,“TypeError:'dict'对象不可调用”错误也是因为pushbullet依赖于python 2.7的某些功能。