ipdb запускает ImportError
ipdb вызывает ошибку импорта для меня, когда я запускаю свой сайт Django локально. Я работаю над Python 2.7 и в виртуальной среде.
which ipdb
показывает путь (/usr/local/bin/ipdb)
, так же как и which ipython
, что удивило меня, так как я думал, что это должно показать мой путь вен (но разве это не должно работать, если оно глобально, в любом случае?). Так я попробовал 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
sys.path:'/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
2 ответа
Я использовал virtualenv-burrito. Удаление моего венва, обновление буррито (virtualenv-burrito upgrade
) и создание новой виртуальной среды решило проблему.
Я просто настроил целую виртуальную среду, чтобы попробовать это, потому что это должно быть простое исправление. Мне удалось настроить ipdb
в моей виртуальной среде, и я напишу, что я сделал шаг за шагом.
$ virtualenv foo
$ cd foo
$ source ./bin/activate # activate venv
... с этой точки зрения which python
а также which 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]:
Кажется, это работает для меня. Я использовал zsh
а также python3
но это не должно иметь значения. Скорее всего, ваша проблема заключается в том, что он не устанавливается в нужных местах, то есть использует глобальные исполняемые файлы вместо тех, что были из virtualenv.
Из моего virtualenv вы могли видеть, что ipdb установлен:
(venv: foo)$ find . -name ipdb
./lib/python3.5/site-packages/ipdb
Надеюсь все это записать поможет:)