Virtualenv: 如果设置了 'nounset' 选项,activate.sh 会失败

创建于 2011-07-07  ·  24评论  ·  资料来源: pypa/virtualenv

尝试激活 virtualenv 时出现以下错误。

$ source test-env/bin/activate
-bash: _OLD_VIRTUAL_PATH: unbound variable

发生这种情况是因为我已将 Bash 配置为使用 _nounset_ 选项,该选项在访问未设置的变量时会引发错误(请参阅此处

最有用的评论

目前的解决方法——

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

所有24条评论

我可以通过更改此行来解决此问题:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
到:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
如果设置了 ${VAR=DEFAULT} 构造,则返回 VAR,如果未设置则返回 DEFAULT(请参阅此页面。然后我们可以使用空字符串作为默认值,从而导致预期的行为。它的可读性比我想要的要低一些,但它确实有效。

实际上,这是一个蹩脚的解决方案,因为它需要重写所有存在测试。 将set -o nounset添加到脚本顶部要容易得多。

我也打这个。

我也是

我怀疑也许有一种方法可以取消脚本内部的 -u 设置,然后在完成时让它恢复原始设置是有意义的。

我试图在这里找到一种方法-http: //stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

我会做:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

到:

if [ -n "${_OLD_VIRTUAL_PATH-}" ] ; then
${var-DEFAULT}  If var not set, evaluate expression as $DEFAULT *

是的,自己打这个。

运行virtualenv==1.11.4

目前的解决方法——

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

这可能由使用if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; thenhttps://github.com/pypa/virtualenv/pull/723修复。

请注意, $_OLD_VIRTUAL_PATH本身是要在 #722 中删除的。 但是#723 也为其他变量修复了它。

:+1:

我也打这个。。。。

这么简单的问题四年后还没有解决,这有点奇怪。
beaumartinez 的工作是目前最简单的。

这是由#645 修复的。

固定的

@dstufft您能否指定在哪个版本中修复了此问题,以便我们可以确保安装了所需的最低版本? 从错误中完全不清楚哪个版本包含修复。

@ssbarnea如上述评论所述,它已于 2015 年 8 月 12 日修复,因此在该日期之后发布的任何版本。 从https://virtualenv.pypa.io/en/latest/changes/这意味着 13.1.1(实际上该版本的注释特别提到了此更改)。 所有这些信息都很容易获得,因此您可能通过简单的搜索就可以找到它(这就是我所做的)。

我有一些坏消息:这个错误应该重新打开,因为现在我得到activate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variable并且在修复这个问题时,我认为引入一个尝试使用严格 bash激活虚拟环境的测试至关重要

这也适用于line 22: ZSH_VERSION: unbound variable ...并且想知道列表会持续多长时间...我的解决方法命令行开始看起来不正常:

PS1="${{PS1:-}}" _OLD_VIRTUAL_PATH="${{_OLD_VIRTUAL_PATH:-}}" _OLD_VIRTUAL_PYTHONHOME="${{_OLD_VIRTUAL_PYTHONHOME:-}}" source "$VENV/bin/activate"

您当然可以自己设置环境,或使用 Python 可执行文件的完整路径名。

很抱歉重新讨论这个问题,我犯了一个错误,没有检查我们在构建服务器上拥有的 virtualenv 版本,我做了一个丑陋的发现,一个古老的版本 1.10.1。 这会导致很多错误。 我明天要升级它。

无需道歉; 事实上,我从这次复活中学到了一些东西
对话。

2017 年 3 月 7 日星期二下午 3:09,Sorin Sbarnea [email protected]
写道:

抱歉重新开始讨论这个问题,我犯了一个错误
检查我们在构建服务器上的 virtualenv 版本,我
做了一个丑陋的发现,一个古老的版本 1.10.1。 这将算作
很多错误。 我明天要升级它。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js
.

即使在当前版本中似乎仍然存在该错误,所以我将其提出为https://github.com/pypa/virtualenv/issues/1029

此页面是否有帮助?
0 / 5 - 0 等级