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中使用?
我想我想要的是
~/.local/lib/python2.7/site-packages/
具有pip
的--user
标志,然后--system-site-packages
标志创建我的virtualenv ,但是对于用户包而不是系统包.我目前的解决方法是pip install jedi
在每个virtualenvs.然后,当我添加新的依赖项I pip install foo
时pip freeze > requirements.txt
,然后jedi
在提交之前手动删除文件中的一些其他内容.显然,这是耗时且容易出错的.
有人有更好的解决方案吗?
当virtuenv
activate
s 时,它会更改几个环境变量,例如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
Run Code Online (Sandbox Code Playgroud)