ImportError: No module named 'thread'
Asked Answered
E

5

25

when I run mitmproxy command in command line, I get the following error.

% 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'

I googled this error and found this stackoverflow Q&A page.

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

according to the page above, the error occurs because module "thread" is renamed to "_thread" in python3.

So, I know what's causing this error, but then what?

I don't know what to do now in order to get rid of this error.

I'm new to python. I've just installed Python and pip into my mac OSX as shown below because I want to use 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

could anyone please tell me what to do now?

Additional Info

As @linusg answered, I created "thread.py" file in "site-packages" directory and pasted the code below in "thread.py"

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

After I did this, "ImportError: No module named 'thread'" disappeared, but now I have another ImportError, which is "import Cookie ImportError: No module named 'Cookie'".

It seems that in Python 3, Cookie module is renamed to http.cookies (https://mcmap.net/q/538433/-django-mod-python-error).

Now what am I supposed to do?

What I have in "site-packages" directory

% 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/
Electroshock answered 23/4, 2016 at 10:48 Comment(0)
C
0

Go to you site-packages folder, create a file called thread.py and paste this code in it:

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

This creates an 'alias' for the module _thread called thread. While the _thread module is very small, you can use dir() for bigger modules:

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

Hope this helps!

Candelabrum answered 23/4, 2016 at 10:59 Comment(9)
Thank you for your help! I'm going to try it now!Electroshock
now I got another error, which is the below. File "/usr/local/lib/python3.5/site-packages/libmproxy/models/http.py", line 2, in <module> import Cookie ImportError: No module named 'Cookie'Electroshock
it seems that in python3 Cookie module is renamed to http.cookies. (https://mcmap.net/q/538433/-django-mod-python-error)Electroshock
so do the same with the cookies moduleCandelabrum
And accept the answer if is was helpful for your questionCandelabrum
so, what i should next is to create "Cookie.py"(C is capital letter) in site-package directory. then, in the file, shoud i write like this?Electroshock
from http.cookies import * all = ("error", "LockType", "start_new_thread", "interrupt_main", "exit", "allocate_lock", "get_ident", "stack_size", "acquire", "release", "locked")Electroshock
You have to add the functions from http.cookies module, not from _thread. It should be __all__ instead of all. If you don't want to add all funktions and variables manually, you can use dir(): __all__ = tuple(dir(http.cookies)), see edited answer.Candelabrum
The above solution actually helped me. Thanks a LotTender
F
47

In Python 3 instead of:

import thread

Do:

import _thread
Feints answered 17/10, 2020 at 13:28 Comment(0)
L
8

You are trying to run Python 2 code on Python 3, which will not work.

As of April 2016, mitmproxy only supports Python 2.7. We're actively working to fix that in the next months, but for now you need to use Python 2 or the binaries provided at http://mitmproxy.org.

As of August 2016, the development version of mitmproxy now supports Python 3.5+. The next release (0.18) will be the first one including support for Python 3.5+.

As of January 2017, mitmproxy only supports Python 3.5+.

Laky answered 26/4, 2016 at 17:37 Comment(1)
The accepted solution mistakenly tries to "fix" a Python 3 installation to run Python 2 code, which will not work. OP's original goal is to be able to run mitmproxy, so this answers his question how he can run mitmproxy (which is what people search for).Laky
C
0

Go to you site-packages folder, create a file called thread.py and paste this code in it:

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

This creates an 'alias' for the module _thread called thread. While the _thread module is very small, you can use dir() for bigger modules:

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

Hope this helps!

Candelabrum answered 23/4, 2016 at 10:59 Comment(9)
Thank you for your help! I'm going to try it now!Electroshock
now I got another error, which is the below. File "/usr/local/lib/python3.5/site-packages/libmproxy/models/http.py", line 2, in <module> import Cookie ImportError: No module named 'Cookie'Electroshock
it seems that in python3 Cookie module is renamed to http.cookies. (https://mcmap.net/q/538433/-django-mod-python-error)Electroshock
so do the same with the cookies moduleCandelabrum
And accept the answer if is was helpful for your questionCandelabrum
so, what i should next is to create "Cookie.py"(C is capital letter) in site-package directory. then, in the file, shoud i write like this?Electroshock
from http.cookies import * all = ("error", "LockType", "start_new_thread", "interrupt_main", "exit", "allocate_lock", "get_ident", "stack_size", "acquire", "release", "locked")Electroshock
You have to add the functions from http.cookies module, not from _thread. It should be __all__ instead of all. If you don't want to add all funktions and variables manually, you can use dir(): __all__ = tuple(dir(http.cookies)), see edited answer.Candelabrum
The above solution actually helped me. Thanks a LotTender
A
0

Easiest solution is to create a virtualenv with python2 and run mitmproxy on this virtualenv

virtualenv -p `which python2` .env
source .env/bin/activate
pip install mitmproxy
.env/bin/mitmproxy
Actinomorphic answered 25/7, 2016 at 12:18 Comment(6)
.env/bin/mitmproxy -bash: .env/bin/mitmproxy: No such file or directorySinter
You should install mimtproxy in this virtual env with pip install mitmproxyActinomorphic
Now I get an error: Could not find a version that satisfies the requirement mimtmproxy (from versions: ) No matching distribution found for mimtmproxySinter
There was a typo in the answer, try again with correct spelling. :)Laky
@MaximilianHils But now I get this error: Running virtualenv with interpreter /Users/igorganapolsky/.env/bin/python Please use the system python to run this scriptSinter
@Sinter deactivate the virtualenv you was in when you got the error and reissue the command (I know it is quite late, I am leaving this comment for reference)Anchoveta
D
-1

The name of the file saved could be threading, this would give an error as threading is a predefined class in Python. Try changing the name of your file. It would help....

Drum answered 17/6, 2019 at 11:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.