Mic*_*ael 24 python mocking python-unittest
我在Ubuntu 14.04.2 LTS上使用python 2.7.6.我正在使用mock来模拟一些单元测试并注意到当我导入mock时它无法导入换行.
不确定是否有一个不同版本的模拟或六个我应该使用它的导入工作?找不到任何相关答案,我没有使用虚拟环境.
mock模块说它与python 2.7.x兼容:https://pypi.python.org/pypi/mock
mock == 1.1.3 six == 1.9.0
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from mock import Mock
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mock/__init__.py", line 2, in <module>
import mock.mock as _mock
File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 68, in <module>
from six import wraps
ImportError: cannot import name wraps
Run Code Online (Sandbox Code Playgroud)
也试过sudo没有运气.
$ sudo python -c 'from six import wraps'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: cannot import name wraps
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 31
安装mock == 1.0.1并且由于某种原因而起作用.(耸耸肩)
编辑:我真正的解决方案是将setuptools更新到最新版本,它允许我升级模拟和六个到最新.我在setuptools 3.3上.在我的情况下,我还必须手动删除所述模块,因为它们归'/usr/local/lib/python2.7/dist-packages/'中的操作系统所有.
检查一切的版本
pip freeze | grep -e six -e mock
easy_install --version
Run Code Online (Sandbox Code Playgroud)
更新一切
wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
pip install mock --upgrade
pip install six --upgrade
Run Code Online (Sandbox Code Playgroud)
谢谢@lifeless
小智 19
我在我的mac上遇到了同样的问题,我能够通过意识到我的python的sys.path包含两者来解决这个问题
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
Run Code Online (Sandbox Code Playgroud)
和
/Library/Python/2.7/site-packages/
Run Code Online (Sandbox Code Playgroud)
与前者比后者早.
您可以通过在python控制台中运行以下命令来测试是否发生了这种情况.
import six
six.__version__
Run Code Online (Sandbox Code Playgroud)
我的python正在从前一个目录(没有包装器)加载一个过时的six.py,即使pip在第二个目录中安装了较新的版本6.(看来mac的框架默认带有六个版本.)
我能够通过将six.py和six.pyc移出第一个目录(需要sudo访问)来修复它,这样python就会在第二个目录中找到更新版本的六个.我相信你也可以改变sys.path中路径的顺序.
要查找需要删除的旧版本的六个版本,请从终端控制台运行此版本
find /System/Library/Frameworks/Python.framework/Versions -name six.py*
Run Code Online (Sandbox Code Playgroud)
因此模拟1.1.1及更高版本在六个1.7或更高版本上定义了版本要求:
https://github.com/testing-cabal/mock/blob/master/requirements.txt#L6
pbr将其反映到setuptools元数据中,该版本具有setup_requires依赖的版本:
https://github.com/testing-cabal/mock/blob/master/setup.py#L17
因此,有两种可能:1)六个1.7还不够新2)有一个发行版6软件包声称是1.9.0,由于某些原因没有包装3)使用中的setuptools无法正确集成缺少pbr和deps 4)您的pip / setuptools组合未正确询问转盘元数据。
我们对setuptools 17.1确实有严格的要求,而setup.py仅在最近才明确报告。如果您能找出其中的一种情况并更新https://github.com/testing-cabal/mock/issues/298,我将非常乐意,以便我们可以解决导致此安装失败的任何交互。 py /车轮。