当我创建python3 virtual-env时,tab-completion(默认使用python3)不再起作用。那是为什么?
virtualenv -p /usr/bin/python3 --system-site-packages ~/venv3.site
. ~/venv3.site/bin/activate
没有--system-site-packages
它有同样的问题:没有制表完成。如果我在没有激活任何虚拟env的情况下运行python3
,则Tab-completion可以正常工作。
答案 0 :(得分:15)
在this GitHub comment上引用Carl Meyer,
是的,virtualenv实现的一个更丑陋的方面是它必须拥有自己的站点模块副本,该模块用于所有virtualenvs,无论它们是用哪个版本创建的。
问题出在$VIRTUAL_ENV/lib/python3.4/site.py
文件中,该文件未设置标签完成。它不提供enablerlcompleter
功能。将它与Python 3分发的site.py文件进行比较。
如果您使用的是Python 3.3或更高版本,我建议pyvenv而不是virtualenv
。
python3 -mvenv ~/venv3.site
您可以做的另一件事是滚动您自己的Python启动脚本并在PYTHONSTARTUP
环境变量中引用它。将标签完成和其他启动调整放在那里。有关此类剧本的示例,请参阅Mike Covington的答案。
答案 1 :(得分:14)
这就是我完成标签完成的方式:
将以下内容添加到~/.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
答案 2 :(得分:0)
与virtualenv
匹配(在Mac OS X High Sierra上的brew中安装了Python 3.6)...
在我的virtualenv中,我做了pip install readline
我试图将~/.pythonrc
添加到我的~/.bash_profile
中,但这不是问题。 .virtualenvs/py3cv4/lib/python3.6/readline.so
正在寻找/usr/local/opt/readline/lib/libreadline.7.dylib
,但由于某些原因我有8。
我创建了链接
ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
无需向~/.bash_profile
添加任何内容
答案 3 :(得分:-1)
我遇到了类似的情况。这可能是由不同的原因造成的。但我只想把它放在这里,以便其他人不会花一天时间来调试这个。
我使用的是Ubuntu 16.04 LTS,Python 3.5.2和pyvenv,Virtualenv 15.1.0。我一直在" 标签&然后终端消失"问题。在我做过的一些批处理文件中,我有#34;设置-e"。显然,当你做"设置-e"在该终端会话中,自动完成将终止该终端窗口。删除"设置-e"从这些批处理文件中,问题得到解决。
答案 4 :(得分:-1)
前面提到的解决方案对我不起作用(在 Mac OS X High Sierra 上使用brew安装了Python 3.6)。
所以我不得不稍微更改我的~/.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")