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) ~ $
。
答案 0 :(得分:3)
按the docs,在项目中创建名为.env
的文件。给它内容
export PS1='(myenv) \w $ '
或任何你想要的。 pipenv shell
会加载它。
(注意:我自己没有尝试pipenv
。今天我知道它存在!:))
如果您的.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
...