2016-04-23 1 views
4

Когда я запустил команду mitmproxy в командной строке, я получаю следующую ошибку.ImportError: Нет модуля с именем 'thread'

% mitmproxy 
Traceback (most recent call last): 
    File "/usr/local/bin/mitmproxy", line 7, in <module> 
    from libmproxy.main import mitmproxy 
    File "/usr/local/lib/python3.5/site-packages/libmproxy/main.py", line 5, in <module> 
    import thread 
ImportError: No module named 'thread' 

Я гугл этой ошибки и нашел это StackOverflow Q & Страницу.

pydev importerror: no module named thread, debugging no longer works after pydev upgrade

в соответствии с приведенной выше страницы, ошибка происходит потому, что модуль «thread» переименован в «_thread» в Python3.

Итак, я знаю, что вызывает эту ошибку, но что тогда?

Я не знаю, что теперь делать, чтобы избавиться от этой ошибки.

Я новичок в python. Я только что установил Python и pip в мой Mac OSX, как показано ниже, потому что я хочу использовать mitmproxy.

% which pip 
/usr/local/bin/pip 
% pip --version 
pip 8.1.1 from /usr/local/lib/python3.5/site-packages (python 3.5) 

% which python 
/usr/bin/python 
% which python3 
/usr/local/bin/python3 

% python --version 
Python 2.7.10 
% python3 --version 
Python 3.5.1 

может ли кто-нибудь сказать мне, что теперь делать?

Дополнительная информация

Как @linusg ответил, я создал "thread.py" файл "сайт-пакетов" каталог и вставить код, приведенный ниже в "thread.py"

from _thread import * 
__all__ = ("error", "LockType", "start_new_thread", "interrupt_main", "exit", "allocate_lock", "get_ident", "stack_size", "acquire", "release", "locked") 

После того как я это сделал , «ImportError: No module named 'thread'» исчез, но теперь у меня есть еще один ImportError, который «import Cookie ImportError: No module named 'Cookie'».

Похоже, что в Python 3 модуль Cookie переименован в http.cookies (stackoverflow.com/questions/3522029/django-mod-python-error).

Теперь, что я должен делать?

Что я имею в "сайт-пакеты" каталога

% ls /usr/local/lib/python3.5/site-packages             (git)-[master] 
ConfigArgParse-0.10.0.dist-info/    mitmproxy-0.15.dist-info/ 
OpenSSL/          netlib/ 
PIL/           netlib-0.15.1.dist-info/ 
Pillow-3.0.0.dist-info/       passlib/ 
PyYAML-3.11.dist-info/       passlib-1.6.5.dist-info/ 
__pycache__/         pathtools/ 
_cffi_backend.cpython-35m-darwin.so*   pathtools-0.1.2.dist-info/ 
_markerlib/          pip/ 
_watchdog_fsevents.cpython-35m-darwin.so*  pip-8.1.1.dist-info/ 
argh/           pkg_resources/ 
argh-0.26.1.dist-info/       pyOpenSSL-0.15.1.dist-info/ 
backports/          pyasn1/ 
backports.ssl_match_hostname-3.5.0.1.dist-info/ pyasn1-0.1.9.dist-info/ 
blinker/          pycparser/ 
blinker-1.4.dist-info/       pycparser-2.14.dist-info/ 
certifi/          pyparsing-2.0.7.dist-info/ 
certifi-2016.2.28.dist-info/     pyparsing.py 
cffi/           pyperclip/ 
cffi-1.6.0.dist-info/       pyperclip-1.5.27.dist-info/ 
click/           setuptools/ 
click-6.2.dist-info/       setuptools-19.4-py3.5.egg-info/ 
configargparse.py        sitecustomize.py 
construct/          six-1.10.0.dist-info/ 
construct-2.5.2.dist-info/      six.py 
cryptography/         test/ 
cryptography-1.1.2.dist-info/     thread.py 
easy_install.py         tornado/ 
hpack/           tornado-4.3.dist-info/ 
hpack-2.0.1.dist-info/       urwid/ 
html2text/          urwid-1.3.1.dist-info/ 
html2text-2015.11.4.dist-info/     watchdog/ 
idna/           watchdog-0.8.3.dist-info/ 
idna-2.1.dist-info/        wheel/ 
libmproxy/          wheel-0.26.0-py3.5.egg-info/ 
lxml/           yaml/ 
lxml-3.4.4.dist-info/ 

ответ

0

Перейти к вам site-packages папку, создать файл с именем thread.py и вставить этот код в нем:

from _thread import * 
__all__ = ("error", "LockType", "start_new_thread", "interrupt_main", "exit", "allocate_lock", "get_ident", "stack_size", "acquire", "release", "locked") 

Это создает «псевдоним» для модуля _thread под названием thread. В то время как _thread модуль очень мал, вы можете использовать dir() для больших модулей:

# Examle for the Cookies module which was renamed to http.cookies: 
# Cookies.py in site-packages 
import http.cookies 
__all__ = tuple(dir(http.cookies)) 

Надеется, что это помогает!

+0

Спасибо за вашу помощь! Я сейчас попробую! – hytm

+0

теперь я получил еще одну ошибку, которая ниже. Файл "/usr/local/lib/python3.5/site-packages/libmproxy/models/http.py", строка 2, в импорта Cookie ImportError: Нет модуль с именем 'Cookie' – hytm

+0

кажется, что в Модуль cookie python3 переименовывается в http.cookies. (http://stackoverflow.com/questions/3522029/django-mod-python-error) – hytm

3

Вы пытаетесь запустить код Python 2 на Python 3, который не будет работать.

С апреля 2016 года mitmproxy поддерживает только Python 2.7. Мы активно работаем над тем, чтобы исправить это в ближайшие месяцы, но на данный момент вам нужно использовать Python 2 или двоичные файлы, представленные в http://mitmproxy.org.

Начиная с августа 2016 года версия разработки mitmproxy теперь поддерживает Python 3.5+. Следующий выпуск (0.18) будет первым, включая поддержку Python 3.5+.

С января 2017 года mitmproxy поддерживает только Python 3.5+.

+0

Это не решит ошибку OP. –

+1

Принятое решение ошибочно пытается «исправить» установку Python 3 для запуска кода Python 2, который не будет работать. Первоначальная цель OP состоит в том, чтобы иметь возможность запускать mitmproxy, так что это отвечает на его вопрос, как он может запускать mitmproxy (это то, что люди ищут). –

0

простое решение для создания virtualenv с python2 и запустить mitmproxy на этом virtualenv

virtualenv -p `which python2` .env 
source .env/bin/activate 
pip install mitmproxy 
.env/bin/mitmproxy 
+0

**. Env/bin/mitmproxy -bash: .env/bin/mitmproxy: Нет такого файла или каталога ** –

+0

Вы должны установить mimtproxy в этом виртуальном env с помощью 'pip install mitmproxy' –

+0

Теперь я получаю сообщение об ошибке: * * Не удалось найти версию, удовлетворяющую требованию mimtmproxy (из версий:) Не найдено подходящего дистрибутива для mimtmproxy ** –