我正在运行DebianWheezy,并从系统包中安装了mitmproxy,并且按钮.py(https://github.com/randomchars/pushbullet.py)使用pip,即
apt-get install mitmproxy
pip install pushbullet.py
从python cmdline导入时Pushbullet有效,如下所示:
^{pr2}$但是,当我试图从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安装了按钮.py以及它的依赖性python magic,请求,后台端口.ssl-将主机名匹配到/usr/local/lib/python2.7/dist packages/。似乎cmdline python已经找到pip安装的包,但是mitmproxy由于某种原因无法找到。在
所以,我尝试通过PYTHONPATH或通过system path添加路径,但我认为我一定是做错了什么。在
$ 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安装的模块?在
感谢Christian Rapp的评论,我进一步研究了为什么要从/usr/lib/python2.6加载mitmproxy的libmproxy。结果是(至少在debian-wheezy包中),mitmproxy shebang显式地指定了python2.6:
这就解释了为什么mitmproxy找不到pushbullet模块,而是在2.6目录中查找。在
我想当我显式加载模块时出现“TypeError:'dict'object is not callable”错误也是因为pushbullet依赖于Python2.7的一些特性。在
相关问题 更多 >
编程相关推荐