Ama*_*yJB 6 python bash virtualenv
我正在尝试创建一个bash脚本来激活virtualenv,pip安装requirements.txt并继续。这将是我的init.sh脚本,供以后使用。
#!/usr/bin/env bash
set -euo pipefail
. ${DIR}/scripts-venv/bin/activate
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
$ {DIR}设置为包含virtualenv的目录。看来问题出在上述set -euo内容上,根据某些样式指南,这是推荐开始使用bash脚本的起点。更具体地说,它的u选项-交互会产生错误/scripts-venv/bin/activate: line 57: PS1: unbound variable。我可以删除它,但是只是想知道为什么会这样。谢谢
如果您能够更新该virtualenv库,则将发现此问题现已修复。它已在pypa / virtualenv / pull / 922中修复,已包含在16.2里程碑中。
< 16.2; 和你所看到的解释$PS1是显示在$bash提示前面的文本。 -u说对未绑定变量的引用是错误的。由于/scripts-venv/bin/activate提到$PS1且由于在交互式shell上没有提示,因此这是一个未绑定的变量,并-u导致脚本失败。
也许这会有所帮助:
调用脚本时,运行该脚本的外壳没有提示。现在,看一下bin/activate第57行:
_OLD_VIRTUAL_PS1="$PS1"
Run Code Online (Sandbox Code Playgroud)
您会看到将$PS1要进行评估,并且由于-u设置了脚本,因此脚本无法继续,因为-u尝试对未设置的变量进行参数评估是错误的。
以下是一些适合您的选项:
bin/activateLINE 57:
- _OLD_VIRTUAL_PS1="$PS1"
+ _OLD_VIRTUAL_PS1="${PS1:-}"
Run Code Online (Sandbox Code Playgroud)
第61行:
- PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
+ PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1:-}"
Run Code Online (Sandbox Code Playgroud)
该:-语法会导致扩大到默认为空字符串,而不是绑定,所以没有错误。但这是繁重的工作,因为您搞砸了virtualenv创建的代码。
仅-u在activate脚本执行期间删除它可能更好。
试试这个脚本,看看我的意思是:
#!/bin/bash
set -eux
echo "Testing vitualenv"
set +u
. venv/bin/activate
set -u
echo "Test complete $?"
Run Code Online (Sandbox Code Playgroud)
通过-u在激活过程中关闭然后再将其重新打开,您可以解决virtualenv的尴尬(如果您不想修复它)。
只需更新virtualenv,使其版本> = 16.2。 pip install --upgrade virtualenv
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |