Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ImportError:无法在Mac上导入名称包装_Python_Unit Testing_Mocking_Pycharm - Fatal编程技术网

Python ImportError:无法在Mac上导入名称包装

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

我试图在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 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,问题得到解决!