簡體   English   中英

為什么virtualenv有效地禁用Python 3制表符完成?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM