使用bash脚本设置PYTHONPATH并运行nosetests

时间:2015-06-12 12:26:04

标签: python bash nose

我有以下脚本设置一个干净的PYTHONPATH

#!/bin/bash

# Get the directory the script is in
DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)

$ Walk up to root of branch dir
DIR=$DIR/../../..

PYTHONPATH=$DIR/module1
PYTHONPATH=$PYTHONPATH:$DIR/module2
PYTHONPATH=$PYTHONPATH:$DIR/module3
PYTHONPATH=$PYTHONPATH:$DIR/module4
export PYTHONPATH

此脚本应该与nosetest命令一起运行,以允许测试在需要时导入所有必需的模块,而不会出现任何问题:

./path/to/script/PythonPath.sh && nosetests <tons of other arguments>

但是,当我运行上面的命令时,我在其中一个模块上得到ImportError,表明它不存在。我在脚本末尾添加了一个echo语句来帮助调试,PYTHONPATH完全符合它的要求。我还尝试手动设置PYTHONPATH,似乎无法重现相同的问题。

1 个答案:

答案 0 :(得分:5)

您无法以bash方式设置环境变量。该脚本最终在自己的进程中运行,在那里设置环境而不是回到你的环境中。在这种情况下,您可以set Load {30 40} source脚本让它影响您当前的环境:

.

source ./path/to/script/PythonPath.sh && nosetests <tons of other arguments>

另外,你有额外的引号没有帮助,至少有1行缺少注释字符。这是一个包含这些修复的脚本:

. ./path/to/script/PythonPath.sh && nosetests <tons of other arguments>

当我获取该文件时,我得到:

#!/bin/bash

# Get the directory the script is in
DIR=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd)

# Walk up to root of branch dir
DIR=$DIR/../../..

PYTHONPATH=$DIR/module1
PYTHONPATH=$PYTHONPATH:$DIR/module2
PYTHONPATH=$PYTHONPATH:$DIR/module3
PYTHONPATH=$PYTHONPATH:$DIR/module4
export PYTHONPATH