Virtualenv activate脚本不会在带有set eu的bash脚本中运行

2024-06-17 17:19:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个bash脚本来激活virtualenv,pip安装要求.txt然后继续。这是我的初始值为以后的业务编写脚本。在

#!/usr/bin/env bash

set -euo pipefail

. ${DIR}/scripts-venv/bin/activate
pip install -r requirements.txt

其中${DIR}设置为包含virtualenv的我的目录。问题似乎出在上面的set -euo,根据一些风格指南,这是推荐的bash脚本的开始。更具体地说,它的u选项-interactive给出了错误/scripts-venv/bin/activate: line 57: PS1: unbound variable。我可以把它取下来,但我只是想知道为什么会这样。 谢谢


Tags: pipenvtxt脚本bashbinvirtualenvvenv
1条回答
网友
1楼 · 发布于 2024-06-17 17:19:48

如果您可以更新,virtualenv>;=16.2将不再有PS1未设置的错误

如果您能够更新virtualenv库,您将发现这一问题现在已得到修复。它是在pypa/virtualenv/pull/922中修复的,它包含在16.2里程碑中。在


关于版本< 16.2;以及对所看到内容的解释

$PS1是bash提示符中$前面的文本。-u表示对未绑定变量的引用是错误的。由于/scripts-venv/bin/activate引用$PS1,并且交互shell上没有提示,因此这是一个未绑定变量,-u导致脚本失败。在

也许这有助于:

https://unix.stackexchange.com/questions/170493/login-non-login-and-interactive-non-interactive-shells

调用脚本时,运行该脚本的shell没有提示。现在,看看bin/activate,第57行:

_OLD_VIRTUAL_PS1="$PS1" 

您可以看到$PS1将被求值,并且因为您已经设置了-u,您的脚本无法继续,因为-u表示尝试对未设置变量进行参数计算是错误的。在

以下是您的一些选择:

{cd9>你可以修正}

第57行:

^{pr2}$

第61行:

-        PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
+        PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1:-}"

:-语法使扩展默认为空字符串而不是未绑定,因此没有错误。但这是一个沉重的任务,因为您正在搞乱virtualenv创建的代码。在

选项2:解决方法

activate脚本中删除-u可能更好。在

试试这个剧本,看看我是什么意思:

#!/bin/bash

set -eux
echo "Testing vitualenv"
set +u
. venv/bin/activate
set -u
echo "Test complete $?"

通过在激活期间关闭-u,然后再次打开它,您就可以解决virtualenv的尴尬(如果您不想修复它的话)。在


选项3[未来!]在

只需更新virtualenv,使其版本为>;=16.2。pip install upgrade virtualenv

相关问题 更多 >