为什么 bash-completion 不加载 virtualenvwrapper?

为什么 bash-completion 不加载 virtualenvwrapper?

Ubuntu 19.10 似乎有一个不太标准的 virtualenvwrapper 包,这给我带来了问题。但从包中安装 pip、virtualenv 和 virtualenvwrapper 似乎比污染 virtualenv 之外的全局环境更明智。

大多数说明 (例如)建议在.bashrc中添加以下内容:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

但是,Ubuntu 安装virtualenvwrapper.sh/usr/share/virtualenvwrapper/

$ dpkg -L virtualenvwrapper
/.
/usr
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/virtualenvwrapper
/usr/share/doc
/usr/share/doc/virtualenvwrapper
/usr/share/doc/virtualenvwrapper/README.txt
/usr/share/doc/virtualenvwrapper/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/virtualenvwrapper.1.gz
/usr/share/virtualenvwrapper
/usr/share/virtualenvwrapper/virtualenvwrapper.sh
/usr/share/virtualenvwrapper/virtualenvwrapper_lazy.sh
/usr/share/doc/virtualenvwrapper/README.Debian
/usr/share/doc/virtualenvwrapper/changelog.Debian.gz
/usr/share/man/man1/add2virtualenv.1.gz
...
/usr/share/man/man1/workon.1.gz

好吧,我可以对其进行修补并从该位置获取源代码,但这README.Debian意味着 bash-completion 应该会接收它:

与 /usr/share/doc/virtualenvwrapper/html/index.html 中的信息相反,此软件包将 virtualenvwrapper.sh 安装为 /usr/share/virtualenvwrapper/virtualenvwrapper.sh,而惰性版本将安装为 /usr/share/virtualenvwrapper/virtualenvwrapper_lazy.sh。

如果您安装了 bash-completion 软件包并在 /etc/bash.bashrc 或 ~/.bashrc 中启用 bash 补全支持,则 Virtualenvwrapper 已启用。/etc/bash_completion.d/virtualenvwrapper 中的 bash 补全文件默认提供 virtualenvwrapper 的惰性版本,但可以配置为加载完整版本。

如果你只想使用 virtualenvwrapper 你可能只需添加

源 /usr/share/virtualenvwrapper/virtualenvwrapper.sh

到你的 ~/.bashrc 或 ~/.zshrc。

我的 .bashrc 似乎已经包含启用 bash 完成支持所需的信息:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

我正在运行一个来自osboxes.org在 Windows 10 上的 VMWare Player 内。

答案1

bashvirtualenvwrapper补全默认加载“惰性”版本的脚本,这意味着真正的包装器脚本不会在 shell 启动时加载;只有当需要使用时才会真正加载,例如在输入 时mkvirtualenvspacetabtab。shell 启动时间更快,是的,但这种惰性加载可能会污染控制台输出,产生不利影响,因此要小心。

相关内容