我正在尝试使用IDE上的模拟运行Python单元测试:PyCharm。
由于我使用Mac(El Capiton),我无法做到:
pip install mock
因此我做了:
sudo -H pip install --ignore-installed six
sudo -H pip install --ignore-installed mock
安装成功。现在,当我编写测试时,它会抛出以下错误:
File "/Library/Python/2.7/site-packages/mock/__init__.py", line 2, in <module>
import mock.mock as _mock
File "/Library/Python/2.7/site-packages/mock/mock.py", line 68, in <module>
from six import wraps
ImportError: cannot import name wraps
我该如何解决这个问题?
答案 0 :(得分:3)
模拟需要six version 1.7 or newer。 pip show six
获取版本并pip install --upgrade six
升级。
如果不起作用,请检查正在加载的six
版本。
检查 Python版本
thomas:~$ python -c 'import six; print(six.__version__)'
1.10.0
使用pip show six
thomas:~$ pip show six | grep ^Version
Version: 1.10.0
检查 Python位置
thomas:~$ python -c 'import six; print(six.__file__)'
/Library/Python/2.7/site-packages/six.pyc
删除python版本和pip版本不同,从 Python位置
删除six.py
和six.pyc
来源:
答案 1 :(得分:3)
问题是在/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
中有一个旧版本的六(1.4.1),在sys.path
中,此目录位于/Library/Python/2.7/site-packages
之前,其中安装了较新版本的六。这看起来像是Apple提供的python的配置问题。
我可以提出的最简单的解决方案是明确设置PYTHONPATH
环境变量以包含/Library/Python/2.7/site-packages
,因此它会在sys.path
路径之前的/System/...
中结束:< / p>
export PYTHONPATH="/Library/Python/2.7/site-packages:$PYTHONPATH"
我想在/ usr / local中安装一个正确配置的python也可以做到这一点。