2014-11-09 2 views
0

Я запускаю Debian wheezy и установил mitmproxy из системных пакетов и pushbullet.py (https://github.com/randomchars/pushbullet.py) с помощью pip, т.е.Debian mitmproxy не может найти/загрузить модули python-2.7, установленные через pip

apt-get install mitmproxy 
pip install pushbullet.py 

Pushbullet работает, когда я импортировать из питона CmdLine, например, так:

$ 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) 
>>> 

Однако, когда я пытаюсь импортировать модуль pushbullet изнутри mitmproxy сценария, он не может найти модуль.

$ 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 

Теперь, пип установил pushbullet.py и его зависимости питон-магию, запросы, backports.ssl-матч-имя хост в /usr/local/lib/python2.7/dist-packages/. Похоже, что python cmdline нашел пакеты с установленным пакетом, но 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 

Может кто-нибудь пролить свет на то, почему все работает через командная_строка питона и не при загрузке в качестве сценария внутри mitmproxy, и как это исправить? Как загружать модули, установленные через pip?

+0

Что делает 'which -a python' output –

+0

Почему вы пытаетесь импортировать пакеты из другой версии python, чем работает ваш скрипт? И самое главное, почему вы установили python 2.7 в/usr/local? Debian wheezy поставляется с python 2.7 https://packages.debian.org/de/wheezy/python –

+0

который -a python =>/usr/bin/python. Да, я запускаю python 2.7.3 (из выхода cmdline выше). Если быть точным, 2.7.3-4 + deb7. Не уверен, где у вас возникла идея, что я установил python 2.7 в/usr/local. Пакеты debian mitmproxy устанавливают файлы в /usr/lib/python2.6/dist-packages/libmproxy и /usr/lib/python2.7/dist-packages/libmproxy. Это был pip, который установил pushbullet и зависимости в/usr/local –

ответ

0

Благодаря комментариям Кристиана Раппа я подробно рассмотрел, почему libmproxy от mitmproxy загружается из /usr/lib/python2.6. Оказывается, что (по крайней мере, на Debian свистящих пакет), то mitmproxy притон явно указывает python2.6:

$ head -1 /usr/bin/mitmproxy 
#! /usr/bin/python2.6 

Это объясняет, почему mitmproxy не удается найти модуль pushbullet; вместо этого он ищет в каталогах 2.6.

Я предполагаю, что ошибка «TypeError: 'dict» не является вызываемой », когда я явно загружал модуль, также потому, что pushbullet полагался на некоторую функцию python 2.7.