我尝试使用一个名为vcrpy的包来加速django应用程序测试套件的执行。我在Mac上使用django1.7和python2.7。在
我在我的一个测试中添加了以下几行:
import vcr
with vcr.use_cassette('recording.yaml'):
结果是导入错误:
^{pr2}$VCR软件包本身的问题代码是:
import six
from six.moves.http_client import (
HTTPConnection,
HTTPSConnection,
HTTPMessage,
HTTPResponse,
)
有趣的是:当我从一个普通的python控制台运行它时,这段代码似乎运行得很好,但是它在Django或Django下导致了上面的ImportError管理.py壳牌。在
你知道怎么回事吗?在
(关于六个模块位置的其他详细信息:
当我运行纯python控制台时,我得到以下结果:
Python 2.7.8 (v2.7.8:ee879c0ffa11, Jun 29 2014, 21:07:35)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import six
>>> print six.__file__
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six.pyc
使用import django; django.setup()
,从manage.py shell
执行相同的操作,会得到完全相同的目录六、pyc文件。在
)
听起来像是多个版本的冲突。我通过降级我的版本six解决了一个类似的错误(1.9.0导致了这个错误,1.8.0和1.7.0也是如此)。1.6.0工作无误。在
我得到的错误是: 从六步走导入http客户端 ImportError:没有名为moves的模块
对于最初的问题来说可能有点晚了,但我是通过谷歌来这里的,所以为了将来的参考,我的解决方案如下:
问题
我发现的问题是macos不仅附带python,而且还预装了一些软件包。六是这些一揽子计划中的一个,冲突就在其中。pre-installed six优先于pip-installed-six,但是pip仍然根据它自己安装的内容提供信息(例如six 1.9.0与1.4.1)。在
预装(版本1.4.1):
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
不管你为我安装了什么pip 1.0:
/Library/Python/2.7/site-packages/
您可以通过运行以下命令来检查这种情况:
修复
解决方案其实很简单
export PYTHONPATH="/Library/Python/2.7/site-packages:$PYTHONPATH"
在您的
~/.bashrc
(或shell使用的任何文件)中。如果您已经将pip配置为安装在其他地方,那么将其放在pythonpath中。在我在Fedora21上也遇到过类似的问题。原因是安装了2个
six 1.2.0 and 1.9.0
版本。我通过卸载six
解决了这个问题,并重新安装了最新版本:相关问题 更多 >
编程相关推荐