[英]Why does virtualenv effectively disable Python 3 tab-completion?
當我創建python3 virtual-env時,tab-completion(默認使用python3)不再起作用。 這是為什么?
virtualenv -p /usr/bin/python3 --system-site-packages ~/venv3.site
. ~/venv3.site/bin/activate
沒有--system-site-packages
它有同樣的問題:沒有tab-completion。 如果我在沒有激活任何虛擬環境的情況下運行python3
,則tab-completion工作。
引用Carl Meyer的GitHub評論 ,
是的,virtualenv實現的一個更丑陋的方面是它必須擁有自己的站點模塊副本,該模塊用於所有virtualenvs,無論它們創建的是哪個版本的Python。
問題出在$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的答案。
這就是我完成標簽完成的方式:
在~/.pythonrc.py
添加了以下~/.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
前面提到的解決方案對我不起作用(在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")
堅持使用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
添加任何內容
我遇到了類似的情況。 這可能是由不同的原因造成的。 但我只想把它放在這里,以便其他人不會花一天時間來調試這個。
我使用的是Ubuntu 16.04 LTS,Python 3.5.2和pyvenv,Virtualenv 15.1.0。 我不斷得到“ 標簽然后終端消失 ”的問題。 在我做“源”的一些批處理文件中,我有“set -e”。 顯然,當您在該終端會話中執行“set -e”時,自動完成將終止該終端窗口。 從這些批處理文件中刪除“set -e”,問題已解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.