19

当我在命令行中运行mitmproxy命令时,出现以下错误。

% 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&A 页面。

pydev importerror: no module named thread,pydev升级后调试不再起作用

根据上面的页面,发生错误是因为模块“ ”在python3中thread被重命名为“ ”。_thread

所以,我知道是什么导致了这个错误,但是然后呢?

我不知道现在该怎么做才能摆脱这个错误。

我是 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在“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")

在我这样做之后,“ 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/
4

5 回答 5

27

In Python 3 instead of:

import thread

Do:

import _thread
于 2020-10-17T13:28:10.250 回答
7

您正在尝试在 Python 3 上运行 Python 2 代码,但这是行不通的。

截至 2016 年 4 月,mitmproxy 仅支持 Python 2.7。我们将在接下来的几个月内积极努力解决这个问题,但现在您需要使用 Python 2 或http://mitmproxy.org提供的二进制文件。

截至 2016 年 8 月,mitmproxy 的开发版本现在支持 Python 3.5+。下一个版本 (0.18) 将是第一个包含对 Python 3.5+ 的支持的版本。

截至 2017 年 1 月,mitmproxy 仅支持 Python 3.5+。

于 2016-04-26T17:37:17.677 回答
0

最简单的解决方案是使用 python2 创建一个 virtualenv 并在这个 virtualenv 上运行 mitmproxy

virtualenv -p `which python2` .env
source .env/bin/activate
pip install mitmproxy
.env/bin/mitmproxy
于 2016-07-25T12:18:46.723 回答
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))

希望这可以帮助!

于 2016-04-23T10:59:32.300 回答
-1

保存的文件的名称可能是线程,这会产生错误,因为线程是 Python 中的预定义类。尝试更改文件的名称。这会有所帮助....

于 2019-06-17T11:57:49.273 回答