6

我在 Emacs 中使用Jedi进行 Python 自动完成,但它不是我的代码的依赖项,所以我不想把它放在我的requirements.txt. (其他开发者可能不会使用 Jedi 编辑器插件,当我部署到 Heroku 时肯定不需要它。)

但是 Jedi 必须从我的 virtualenv 中可用才能运行,即如果我不能

import jedi

它不起作用。

有没有一种在全球范围内安装 Jedi 用户的好方法,以便它在我所有的 virtualenvs 中都可用?

我想要的是

  1. 将 Jedi 安装到~/.local/lib/python2.7/site-packages/withpip--userflag中,然后到
  2. 使用flag--system-site-packages等效项创建我的 virtualenv ,但用于用户包而不是系统包。

我目前的解决方法是pip install jedi在我的每个 virtualenvs 中。然后,当我添加新的依赖项时,我pip install foo, ,然后在提交之前从文件中pip freeze > requirements.txt手动删除和其他一些东西。jedi显然,这是耗时且容易出错的。

有人有更好的解决方案吗?

4

1 回答 1

4

virtuenv activates 时,它会更改几个 env 变量,例如PATH PYTHONHOMEPS1等,以指向所需的 python 二进制文件、库等。您可以更改脚本以更改PYTHONPATH为使用您的用户站点包,即~/.local/lib/python2.7/site-packages,也可能是您的系统站点-包。使用此设置,pip 将在虚拟环境中搜索库,然后故障转移到用户/系统站点包。请注意,通常激活脚本根本不会改变PYTHONPATH

也就是说,在您的virtual_env/bin/activate.

# in activate script

    # in deactivate function
    if [ -n "$_OLD_VIRTUAL_PYTHONPATH" ] ; then
        PYTHONPATH="$_OLD_VIRTUAL_PYTHONPATH"
        export PYTHONPATH
        unset _OLD_VIRTUAL_PYTHONPATH
    fi

# in activate section
if [ -n "$PYTHONPATH" ] ; then
    _OLD_VIRTUAL_PYTHONPATH="$PYTHONPATH"
    PYTHONPATH=$HOME/.local/lib/python2.7/site-packages:/usr/lib/python2.7/site-packages
fi
于 2014-04-28T18:24:29.243 回答