Debian mitmproxy无法通过pip找到/加载python-2.7模块

时间:2014-11-09 12:12:33

标签: python python-2.7 debian python-2.6 mitmproxy

我正在运行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安装的模块?

1 个答案:

答案 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的某些功能。