- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用 Jedi用于 Emacs 中的 Python 自动完成,但它不是我的代码的依赖项,所以我不想将它放在我的 requirements.txt
中。 (其他开发者可能不会使用 Jedi 编辑器插件,我部署到 Heroku 时肯定不需要。)
但是 Jedi 必须在我的 virtualenv 中可用才能运行,也就是说,如果我做不到
import jedi
它不起作用。
有没有一种好的方法可以全局安装 Jedi,以便它在我所有的 virtualenvs 中都可用?
我认为我想要的是
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
和其他一些东西提交前的文件。显然,这是耗时且容易出错的。
有没有人有更好的解决方案?
最佳答案
当virtuenv
activate
时,它改变了几个环境变量,比如PATH
,
、
PYTHONHOMEPS1
等指向所需的 python 二进制文件、库等。您可以更改脚本以更改 PYTHONPATH
以使用您的用户站 pip -包,即 ~/.local/lib/python2.7/site-packages
,可能还有你的系统站 pip 包。使用此设置,pip 将在虚拟环境中搜索库,然后故障转移到用户/系统站 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
关于python - 可以让 virtualenvs 回退到用户包而不是系统包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23348049/
我是一名优秀的程序员,十分优秀!