2016-04-23 72 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' 

我用googled這個錯誤,發現這個stackoverflow Q &一頁。

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

根據上述頁面中,因爲模塊「thread」在python3重命名爲「_thread」發生錯誤。

所以,我知道是什麼原因導致這個錯誤,但那又如何?

我不知道現在要做什麼才能擺脫這個錯誤。

我是新來的蟒蛇。我剛剛將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

謝謝你的幫助運行mitmproxy!我現在要試一試! – hytm

+0

現在我得到了另一個錯誤,這是下面的錯誤。 文件「/usr/local/lib/python3.5/site-packages/libmproxy/models/http.py」,2號線,在 進口餅乾 導入錯誤:沒有模塊命名爲「曲奇」 – hytm

+0

似乎在python3 Cookie模塊被重命名爲http.cookies。 (http://stackoverflow.com/questions/3522029/django-mod-python-error) – hytm

3

您正在嘗試在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+。

+0

這並不解決OP的錯誤。 –

+1

被接受的解決方案錯誤地嘗試「修復」Python 3安裝以運行Python 2代碼,這將不起作用。 OP的最初目標是能夠運行mitmproxy,所以這回答了他的問題,他如何運行mitmproxy(這是人們搜索的)。 –

0

最簡單的方法是創建一個與virtualenv中和python2在此的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

您應該在此虛擬env中使用'pip install mitmproxy'安裝mimtproxy –

+0

現在我收到一個錯誤:* *找不到符合要求的版本mimtmproxy(來自版本:) 沒有找到與mimtmproxy匹配的發佈** –

相關問題