我在Emacs中使用Jedi进行Python自动完成,但它不是我的代码的依赖项,所以我不想把它放在我的requirements.txt
中。 (其他开发人员可能不使用Jedi编辑器插件,当我部署到Heroku时肯定不需要它。)
但绝地必须可以从我的virtualenv获得,以便运作,即如果我不能
import jedi
它没有用。
有没有一种很好的方法可以在全球范围内安装Jedi用户,以便在所有版本中使用它?
我认为我想要的是
pip
's --user
flag将Jedi安装到~/.local/lib/python2.7/site-packages/
,然后安装到--system-site-packages
flag创建我的virtualenv,但是对于用户包而不是系统包。我当前的解决方法是在每个virtualenvs中pip install jedi
。然后,当我添加新的依赖项pip install foo
,pip freeze > requirements.txt
时,然后在提交之前从文件中手动删除jedi
和其他一些内容。显然,这非常耗时且容易出错。
有人有更好的解决方案吗?
答案 0 :(得分:4)
当virtuenv
activate
时,它会更改几个env变量,例如PATH
,
PYTHONHOME
,PS1
等等,以指向所需的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