django下六个问题?

时间:2014-12-26 11:29:17

标签: python django

我正在尝试使用名为vcrpy的软件包来加速我的django应用程序测试套件的执行。我在Mac上使用django 1.7,使用Python 2.7。

我在我的一个测试中添加了以下几行:

import vcr
with vcr.use_cassette('recording.yaml'):

结果是导入错误:

    import vcr
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/__init__.py", line 2, in <module>
    from .config import VCR
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/config.py", line 6, in <module>
    from .cassette import Cassette
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/cassette.py", line 12, in <module>
    from .patch import CassettePatcherBuilder
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/patch.py", line 8, in <module>
    from .stubs import VCRHTTPConnection, VCRHTTPSConnection
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vcr/stubs/__init__.py", line 9, in <module>
    from six.moves.http_client import (
ImportError: No module named http_client

VCR包本身有问题的代码是:

import six
from six.moves.http_client import (
    HTTPConnection,
    HTTPSConnection,
    HTTPMessage,
    HTTPResponse,
)

有趣的是:当我从普通的python控制台运行它时,这段代码似乎运行良好,但它导致Django下或django manage.py shell下的ImportError。

知道可能出错的是什么?

(关于六个模块位置的一些其他细节:

当我运行普通的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执行相同的操作会生成完全相同的目录和相同的six.pyc文件。

3 个答案:

答案 0 :(得分:9)

对于原始问题可能有点太迟了,但我是通过Google来到这里以供将来参考,这是我的解决方案:

问题

我发现的问题是mac os不仅包含python,还包含一些预装的包。六是其中一个包,其中就是冲突。预先安装的六个优先于安装的六个点,但是pip仍然根据它自己安装的内容提供信息(例如六个1.9.0对1.4.1)。

预装(版本1.4.1):

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/

安装pip(无论你安装了什么,对我来说都是1.9.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配置为安装在其他位置,请将其放在python路径中。

答案 1 :(得分:1)

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

pip uninstall six
pip install six

答案 2 :(得分:0)

听起来像多版本冲突。我通过降级我的六版本来解决了类似的错误(1.9.0引起了错误,1.8.0和1.7.0也是如此)。 1.6.0无误地工作。

我得到的错误: 从six.moves导入http_client ImportError:没有名为move

的模块