首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Debian mitmproxy无法找到/加载通过pip安装的python-2.7模块

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

Stack Overflow用户
提问于 2014-11-09 20:12:33
回答 1查看 1.1K关注 0票数 0

我正在运行Debian wheezy,并且已经从系统包中安装了mitmproxy,并使用pip安装了pushbullet.py (https://github.com/randomchars/pushbullet.py)。

代码语言:javascript
复制
apt-get install mitmproxy
pip install pushbullet.py

当我从python cmdline导入时,Pushbullet可以工作,如下所示:

代码语言:javascript
复制
$ 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模块时,它无法找到该模块。

代码语言:javascript
复制
$ 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或系统路径添加路径,但我认为我仍然做错了什么。

代码语言:javascript
复制
$ 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安装的模块?

EN

回答 1

Stack Overflow用户

发布于 2014-11-09 22:32:02

感谢Christian Rapp的评论,我进一步研究了为什么mitmproxy的libmproxy是从/usr/lib/python2.6加载的。事实证明(至少在debian的wheezy包中),mitmproxy shebang显式指定了python2.6:

代码语言:javascript
复制
$ head -1 /usr/bin/mitmproxy
#! /usr/bin/python2.6

这就解释了为什么mitmproxy找不到pushbullet模块,而是查找2.6版本的目录。

我猜想当我显式加载模块时出现"TypeError:'dict‘object is not callable“错误也是因为pushbullet依赖于Python2.7的一些特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26828009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档