Почему virtualenv эффективно отключает заполнение вкладки Python 3?
Когда я создаю python3 virtual-env, добавление табуляции (по умолчанию с python3) больше не работает. Почему это?
virtualenv -p /usr/bin/python3 --system-site-packages ~/venv3.site
. ~/venv3.site/bin/activate
Без --system-site-packages
у него та же проблема: нет завершения табуляции. Если я запустил python3
без активации виртуального env, будет выполнено выполнение табуляции.
Ответы
Ответ 1
Цитата Карла Мейера на этот комментарий GitHub,
Да, один из уродливых аспектов реализации virtualenv заключается в том, что у него должна быть своя собственная копия модуля сайта, которая используется для всех virtualenvs, независимо от того, какая версия Python создана.
Проблема заключается в файле $VIRTUAL_ENV/lib/python3.4/site.py
, который не настраивает вкладку. Он не предоставляет функцию enablerlcompleter
. Сравните его с файлом site.py, распространяемым с помощью Python 3.
Если вы используете Python 3.3 или новее, я советую pyvenv вместо virtualenv
.
python3 -mvenv ~/venv3.site
Еще одна вещь, которую вы могли бы сделать - это запустить свой собственный запуск Python script и обратиться к нему в переменной среды PYTHONSTARTUP
. Поместите вкладку и другие настройки загрузки. См. Ответ Майка Ковингтона на пример такого script.
Ответ 2
Вот как я получил завершение табуляции:
Добавлено значение ~/.pythonrc.py
:
try:
import readline
except ImportError:
print("Module readline not available.")
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
В ~/.bash_profile
добавлено следующее:
export PYTHONSTARTUP=$HOME/.pythonrc.py
Ответ 3
Я попал в подобную ситуацию. Это может быть вызвано другой причиной. Но я просто хочу сохранить его здесь, чтобы другие люди не провели еще один день, чтобы отлаживать это.
Я использую Ubuntu 16.04 LTS, Python 3.5.2 с pyvenv, Virtualenv 15.1.0. Я продолжал получать " вкладку, а затем проблему с терминалом". В некоторых пакетных файлах, которые я использовал "source", у меня был "set -e" . По-видимому, когда вы делаете "set -e" в этом сеансе терминала, автозаполнение завершает это окно терминала. Удалите "set -e" из этих пакетных файлов, проблема была решена.
Ответ 4
Ранее упомянутые решения не сработали для меня (Python 3.6 установлен с brew на Mac OS X High Sierra).
Поэтому мне пришлось слегка изменить файл ~/.pythonrc.py
:
import readline
import rlcompleter
readline.parse_and_bind('bind ^I rl_complete')
И, конечно же, вам нужна эта строка в ~/.bash_profile
:
export PYTHONSTARTUP=$HOME/.pythonrc.py
В Ubuntu скорее используйте:
import readline
import rlcompleter
readline.parse_and_bind("tab: complete")