在PS1中显示pipenv virtualenv

时间:2017-09-27 13:04:57

标签: python bash virtualenv ps1 pipenv

Pipenv是一个相对较新的打包工具,包含“Pipfile,Pip和Virtualenv”。我已在.bashrc进行了更改以简化我的PS1,但现在发现我需要我的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) ~ $

2 个答案:

答案 0 :(得分:3)

the docs,在项目中创建名为.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中设置的值。

答案 1 :(得分:0)

如果您安装了virtualenv,则在pipenv中会出现此问题。 我确实遇到了麻烦,因为pipenv外壳弄乱了我定义的自定义PS1。我在这里回答的原因是,在谷歌搜索时,这是最类似于我的问题的问题。

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

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

...

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

...