我正在尝试使用一个名为 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;来自
产生完全相同的目录和相同的 six.pyc 文件。 manage.py shell
的 django.setup()
)
最佳答案
对于最初的问题来说可能有点太晚了,但我是通过谷歌来到这里的,所以为了将来引用,这是我的解决方案:
问题
我发现的问题是 mac os 不仅预装了 python,还预装了一些包。六是这些包裹之一,其中存在冲突。预安装的 6 个优先于 pip 安装的 6 个,但 pip 仍然根据它自己安装的内容提供信息(例如 6 个 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 配置为安装在其他地方,请将其放在 pythonpath 中。
关于python - django 下的六个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656510/