gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:07:11 24 4
gpt4 key购买 nike

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

但是 Jedi 必须在我的 virtualenv 中可用才能运行,也就是说,如果我做不到

import jedi

它不起作用。

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

认为我想要的是

  1. 使用 pip's --user flag 将 Jedi 安装到 ~/.local/lib/python2.7/site-packages/ , 然后到
  2. 使用 the --system-site-packages flag 的等价物创建我的 virtualenv ,但对于用户包而不是系统包。

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

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

最佳答案

virtuenvactivate时,它改变了几个环境变量,比如PATH
PYTHONHOME
PS1 等指向所需的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com