我有以下脚本设置一个干净的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
,似乎无法重现相同的问题。
答案 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