Python ImportError:无法在Mac上导入名称包装
我试图在IDE:PyCharm上使用mock运行Python单元测试。Python ImportError:无法在Mac上导入名称包装,python,unit-testing,mocking,pycharm,Python,Unit Testing,Mocking,Pycharm,我试图在IDE:PyCharm上使用mock运行Python单元测试。 由于我使用Mac(El Capiton),我无法执行以下操作: pip安装mock 因此我做了: sudo-H pip安装--忽略已安装的六个 sudo-H pip安装--忽略已安装的mock 安装成功。现在,当我编写测试时,它抛出以下错误: File "/Library/Python/2.7/site-packages/mock/__init__.py", line 2, in <module> import
由于我使用Mac(El Capiton),我无法执行以下操作:
pip安装mock
因此我做了:sudo-H pip安装--忽略已安装的六个
sudo-H pip安装--忽略已安装的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
File”/Library/Python/2.7/site-packages/mock/__-init___;u.py“,第2行,在
导入mock.mock作为\u mock
文件“/Library/Python/2.7/site packages/mock/mock.py”,第68行,在
从六个进口包装
ImportError:无法导入名称包装
如何解决此问题?模拟需要pip show six
获取版本,并pip安装--upgrade six
升级
如果不起作用,请检查正在加载哪个版本的six
- 检查Python版本
thomas:~$ python -c 'import six; print(six.__version__)'
1.10.0
thomas:~$ python -c 'import six; print(six.__file__)'
/Library/Python/2.7/site-packages/six.pyc
- 使用
pip show six检查pip版本
thomas:~$ pip show six | grep ^Version
Version: 1.10.0
- 检查Python位置
thomas:~$ python -c 'import six; print(six.__version__)'
1.10.0
thomas:~$ python -c 'import six; print(six.__file__)'
/Library/Python/2.7/site-packages/six.pyc
删除python版本和pip版本不同,从python位置删除six.py
和six.pyc
thomas:~$ python -c 'import six; print(six.__version__)'
1.10.0
thomas:~$ python -c 'import six; print(six.__file__)'
/Library/Python/2.7/site-packages/six.pyc
资料来源:
问题是在/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python
和sys.path
中,这一目录位于安装了较新版本的six的/Library/Python/2.7/site packages
之前。在我看来,这就像苹果提供的python的配置问题
我能想到的最简单的解决方案是显式地将PYTHONPATH
环境变量设置为包含/Library/Python/2.7/site-packages
,因此它最终位于/System/..
路径之前的sys.path
:
export PYTHONPATH="/Library/Python/2.7/site-packages:$PYTHONPATH"
我想在/usr/local中安装一个正确配置的python也可以做到这一点。我在终端上运行了以下命令:find/System/Library/Frameworks/python.framework/python.framework/Versions-name six.py*
和find:/System/Library/python/Versions/2.7/Extras/lib/python/scipy/lib/six.py/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/scipy/lib/six.pyc/System/Library/Frameworks/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/six.pyc
。哪一个应该删除?肯定有一个旧版本的six
。检查pip show six
并查看pip在何处安装了它。你的爱好是什么?使用python-c“导入六个;打印六个。”查看python正在加载的版本。pip show six
正在显示位置:/System/Library/Frameworks/python.framework/Versions/2.7/Extras/lib/python
python-c“导入系统;打印系统路径
正在返回:[“”,/Library/Python/2.7/site packages/Django-1.9.2-py2.7.egg',“/System/Library/Frameworks/python2.7/lib/python27.zip',”/System/Library/Frameworks/Versions/2.7/lib/python2.7',“/System/lib/lib/Frameworks/python2.7/plat-darwin',“/System/Library/Frameworks/Frameworks/python2.7/python2.7/plat-Ve”rsions/2.7/lib/python2.7/plat-mac'、'/System/Library/Frameworks/Python.Frameworks/Frameworks/framework/Versions/2.7/lib/python2.7/plat-mac/lib scriptpackages'、
…等等实际加载的是什么?Python-c“导入六个;打印六个。”__“
。如果它与pip show six
相同,那么pip show six
的版本是什么。第六个版本1.10.0适合我。pip install——升级six
以升级。未安装mock 1.3.0
并安装mock 1.0.1
。由于后者不依赖于six,问题得到解决!