Почему 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, будет выполнено выполнение табуляции.

Цитируя Карла Мейера в этом комментарии GitHub ,

Да, один из уродливых аспектов реализации virtualenv заключается в том, что у него должна быть своя собственная копия модуля сайта, которая используется для всех virtualenvs независимо от того, с какой версией Python они создаются.

Проблема заключается в $VIRTUAL_ENV/lib/python3.4/site.py , который не $VIRTUAL_ENV/lib/python3.4/site.py завершение табуляции. Он не обеспечивает функцию enablerlcompleter . Сравните его с файлом site.py, распространяемым с помощью Python 3.

Если вы используете Python 3.3 или новее, я советую pyvenv вместо virtualenv .

 python3 -mvenv ~/venv3.site 

Еще одна вещь, которую вы можете сделать, – это PYTHONSTARTUP собственный сценарий запуска Python и обратиться к нему в переменной среды PYTHONSTARTUP . Поместите вкладку и другие настройки загрузки. См. Ответ Майка Ковингтона на пример такого сценария.

Вот как я получил свое завершение табуляции:

Добавлено следующее: ~/.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 

Я попал в подобную ситуацию. Это может быть вызвано другой причиной. Но я просто хочу сохранить его здесь, чтобы другие люди не провели еще один день, чтобы отлаживать это.

Я использую Ubuntu 16.04 LTS, Python 3.5.2 с pyvenv, Virtualenv 15.1.0. Я все время получал проблему « tab & then terminal missing ». В некоторых пакетных файлах, которые я использовал «source», у меня был «set -e». По-видимому, когда вы делаете «set -e» в этом сеансе терминала, автозаполнение завершает это окно терминала. Удалите «set -e» из этих пакетных файлов, проблема была решена.