ImportError:无法在Mac上导入名称换行

时间:2016-03-17 23:05:32

标签: python unit-testing mocking pycharm

我正在尝试使用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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

模拟需要six version 1.7 or newerpip 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.pysix.pyc

来源:

Stackoverflow

Github

Github

答案 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也可以做到这一点。