3

Pipenv是一个相对较新的打包工具,包含“Pipfile、Pip 和 Virtualenv”。我进行了更改以简化我的 PS1,.bashrc但现在发现我需要我的 PS1 来告诉我何时使用我的 virtualenv。

当前 PS1:

PS1='\w $ '

从下面,您可以看到我的提示脚本没有告诉我我是否正在使用虚拟环境:

~ $ cd workspace/myproject/
~/workspace/myproject $ pipenv shell
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
~/workspace/marcus_project $ 

我经常搞砸我的PS1,并希望有一个简单的修复,让 virtualenv 中的提示显示如下:(my-env) ~ $.

4

2 回答 2

5

根据文档,创建一个.env在您的项目中调用的文件。给它内容

export PS1='(myenv) \w $ '

或任何你想要的。 pipenv shell将加载它。

(注:我自己没试过pipenv。今天才知道它存在!:))

拿 2

如果您的.bashrc.profile(或其他启动文件)设置PS1,您可以破解它。

  • 放入export PIPENV_PS1='(myenv) \w $ '你的.env. (这个名字PIPENV_PS1没什么特别的——我只是选了一些我认为有意义的东西。)
  • 在你的末尾.bashrc,添加:

    if [[ $PIPENV_PS1 ]]; then
        export PS1="$PIPENV_PS1"
    fi
    

这样,您.bashrc将复制您在 中设置的值.env

于 2017-09-27T13:07:38.003 回答
2

如果您安装了 virtualenv,则此行为在 pipenv 中开箱即用。我确实遇到了一些麻烦,因为 pipenv shell 弄乱了我定义的自定义 PS1。我在这里回答是因为在谷歌搜索时,这是最像我的问题的问题。

为了解决这个问题,我不得不去vim ~/.virtualenvs/<name of the env>/bin/activate。在这里,我更改了代码,它为我在bash_profile. PS1 pipenv shell 现在在if [ "x(data-load) " != x ] ; then语句中使用 PS1。

我确信这可以以更好的方式实现,而不是在文件中重新定义 PS1,并使用其中的一个,.bash_profile但不想浪费更多时间。

...

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
    # add this line to get original PS1 prompt
    PS1=ORIGINAL PS1 in .bash_profile
    if [ "x(data-load) " != x ] ; then
        # here add the name of the virtual env, and some color if in the mood
        PS1="\[\033[39m\](myenv) ${PS1-}"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
    fi
    export PS1
fi

...
于 2019-06-14T16:10:51.810 回答