Django手下有6个人吗?

2024-06-16 10:51:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用一个名为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文件。在


Tags: django代码pyimport应用程序套件usemac
3条回答

听起来像是多个版本的冲突。我通过降级我的版本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/

您可以通过运行以下命令来检查这种情况:

$ python
>>> import six
>>> print six.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.py'

修复

解决方案其实很简单

export PYTHONPATH="/Library/Python/2.7/site-packages:$PYTHONPATH"

在您的~/.bashrc(或shell使用的任何文件)中。如果您已经将pip配置为安装在其他地方,那么将其放在pythonpath中。在

我在Fedora21上也遇到过类似的问题。原因是安装了2个six 1.2.0 and 1.9.0版本。我通过卸载six解决了这个问题,并重新安装了最新版本:

pip uninstall six
pip install six

相关问题 更多 >