virtualenvs可以回退到用户包而不是系统包吗?

Chr*_*ris 6 python pip virtualenv python-jedi

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

但绝地必须可以从我的virtualenv获得,以便运作,即如果我不能

import jedi
Run Code Online (Sandbox Code Playgroud)

它不起作用.

有没有一种很好的方法来安装Jedi用户全局,以便它可以在我的所有virtualenvs中使用?

我想要的是

  1. 绝地安装到~/.local/lib/python2.7/site-packages/具有pip--user标志,然后
  2. 使用等效--system-site-packages标志创建我的virtualenv ,但是对于用户包而不是系统包.

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

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

xos*_*tom 4

virtuenv activates 时,它会更改几个环境变量,例如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
Run Code Online (Sandbox Code Playgroud)