【问题标题】:ipdb is triggering ImportErroripdb 正在触发 ImportError
【发布时间】:2016-05-16 13:03:59
【问题描述】:

当我在本地运行我的 Django 站点时,ipdb 为我触发了导入错误。我正在使用 Python 2.7 并在虚拟环境中工作。

which ipdb 显示路径 (/usr/local/bin/ipdb)which ipython 也显示路径,这让我感到惊讶,因为我认为它应该显示我的 venv 路径(但如果它是全局的,它不应该工作吗?)。所以我尝试了pip install --target=/path/to/venv ipdb,现在它出现在pip freeze(以前没有)但仍然给我一个导入错误。

which pip/Users/myname/.virtualenvs/myenv/bin/pip/

我的路径:/Users/myname/.virtualenvs/myenv/bin:/Users/myname/.venvburrito/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/myname/bin:/usr/local/bin

系统路径: '/Users/myname/Dropbox/myenv', '/Users/myname/.venvburrito/lib/python2.7/site-packages/pip-1.4.1-py2.7.egg', '/Users/myname/.venvburrito/lib/python2.7/site-packages', '/Users/myname/.venvburrito/lib/python2.7/site-packages/setuptools-8.2-py2.7.egg', '/Users/myname/.virtualenvs/myenv/lib/python27.zip', '/Users/myname/.virtualenvs/myenv/lib/python2.7', '/Users/myname/.virtualenvs/myenv/lib/python2.7/plat-darwin', '/Users/myname/.virtualenvs/myenv/lib/python2.7/plat-mac', '/Users/myname/.virtualenvs/myenv/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/myname/.virtualenvs/myenv/Extras/lib/python', '/Users/myname/.virtualenvs/myenv/lib/python2.7/lib-tk', '/Users/myname/.virtualenvs/myenv/lib/python2.7/lib-old', '/Users/myname/.virtualenvs/myenv/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages']

如果我从终端运行 ipdb,它可以正常工作。我试过重启我的终端。

堆栈跟踪:

Traceback (most recent call last):
  File "/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/myname/.virtualenvs/myenv/lib/python2.7/site-packages/django/views/generic/base.py", line 157, in get
    context = self.get_context_data(**kwargs)
  File "/Users/myname/Dropbox/blog/views.py", line 22, in get_context_data
    import ipdb; ipdb.set_trace()
ImportError: No module named ipdb

【问题讨论】:

  • 在您的venv 中,尝试更新库:pip install -U ipdb ipython
  • @MauroBaraldi 不走运:(
  • which ipdb 在你的 venv 中安装后现在说什么?
  • 另外,在这些情况下,我通常做的第一件事是在通过和失败的配置中转储 sys.path
  • 你能分享你在which pip上得到的输出吗?

标签: python django ipdb


【解决方案1】:

我只是设置了一个完整的虚拟环境来尝试这个,因为它必须是一个简单的修复。我设法在我的虚拟环境中设置了ipdb,我会一步一步写我所做的。

$ virtualenv foo
$ cd foo
$ source ./bin/activate  # activate venv

...此时which pythonwhich pip 在我的虚拟环境中为我提供了正确的python 可执行文件。然后下一步:

(venv: foo)$ pip install ipython

此时,which ipython 在我的虚拟环境中为我提供了正确的 ipython 可执行文件。 确保它指向正确的可执行文件很重要,如果它没有显示正确的可执行文件,而是显示全局可执行文件,请重新激活您的虚拟环境。 ipython(和你所有的可执行文件)指向你的 virtualenv 中正确的可执行文件是至关重要的。

那我试试导入ipdb:

(venv: foo)$ ipython
In [1]: import ipdb
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-2d6f026194dd> in <module>()
----> 1 import ipdb

ImportError: No module named 'ipdb'

找不到模块,因为它还没有安装。让我们开始吧:

(venv: foo)$ pip install ipdb

再试一次:

(venv: foo)$ ipython                                                                                                          [ 16-05-24 22:28 ]
Python 3.5.1 (default, Jan 29 2016, 19:58:36) 
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import ipdb

In [2]: 

这似乎对我有用。我使用的是zshpython3,但这没关系。您的问题很可能是没有安装在正确的位置,这意味着使用全局可执行文件而不是 virtualenv 中的可执行文件。

在我的 virtualenv 中,您可以看到 ipdb 已安装:

(venv: foo)$ find . -name ipdb
./lib/python3.5/site-packages/ipdb

我希望所有这些写下来有帮助:)

【讨论】:

  • 发生了一些奇怪的事情。 ipython 遵循全局路径,而不是我的 venv。我卸载它并在我的 venv 中重新安装它,然后我得到了 No module named traitlets.config.application 的错误。所以我不得不重新安装traitlets。然后与ipython_genutils 相同。就像它缺少所有依赖项一样。我不确定发生了什么。
  • @thumbtackthief 我明白了,看起来你的 venv 可能有点不稳定。您是否尝试过重新安装其中的所有软件包?如果您有需求文件,或者您甚至可以通过pip freeze 获得它,这应该不难。顺便说一句,也重新安装 ipython_genutils,从我在终端中看到的内容来看,这是最后一个依赖项:)
  • 问题是过时的 venv-burrito (我应该在我的问题中包含但没有想到)。不过,你让我走上了正轨——感谢并享受你的赏金!
  • 酷,我很高兴你明白了。谢谢!
【解决方案2】:

我使用的是virtualenv-burrito。删除我的 venv,更新 burrito (virtualenv-burrito upgrade) 并创建一个新的虚拟环境解决了这个问题。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多