这可能是一个愚蠢的问题,但我想知道如何避免这个问题。
在我的〜/ .bashrc文件中,我添加了一些本地路径。以下是PYTHONPATH的示例。在我的工作环境中,我需要不时地执行“source~ / .bashrc”,并且下面的PYTHONPATH变得越来越长,这非常烦人。
如果我可以将它附加到“干净”的PYTHONPATH,那么它可能会更好,而不是附加到现有的PYTHONPATH。无论如何这样做?
export PYTHONPATH=$PYTHONPATH:$CLIENTS:$EXPERIMENTAL/my_pythonlib:/mnt/src/cloud/chanwcom/chanwcom-speech/mnt/experimental/users/chanwcom/bin:$CK_MEDIA_FRAMEWORK
答案 0 :(得分:1)
编辑:我回答了关于保持清洁路径的问题 @ mklement0正确评论说,OP正在谈论PYTHONPATH。 我可以纠正我的答案,但也许其他读者对PATH也有同样的问题 亲爱的Chanwcom,你可以使用下面的方法,你只需要重命名变量。
在扩展路径之前添加一些测试。选择其中一个示例。
if [[ -z "${my_clean_path}" ]]; then
my_clean_path="${PATH}"
fi
# some more commands
PATH="${my_clean_path}:${PYTHONPATH}"
或
if [[ -z "${python_added}" ]]; then
PATH="${PATH}:${PYTHONPATH}" # PATH += also possible here
fi
或(我最喜欢的,没有其他变量)
if [[ "${PATH}" != *${PYTHONPATH}* ]]; then
PATH="${PATH}:${PYTHONPATH}" # PATH += also possible here
fi
或在更改路径之前打开第二个shell。退出到第一个shell并打开一个新的shell。
答案 1 :(得分:1)
解决此问题的“正确”方法是评论中提到的chepner - 修改PYTHONPATH
中的.bash_profile
,它在登录时运行,而不是在运行的.bashrc
中运行对于每个shell。
如果您无法调整将重复项附加到路径的脚本或工具,则可以通过删除非唯一值来清理内容。
这是我使用的策略,它涉及将$ PATH转换为数组,反转数组(即将数组值转换为关联数组的下标),然后从数组索引重建路径:
if [[ ${BASH_VERSINFO[0]} -ge 4 ]]; then
path_a=( ${PATH//:/ } )
declare -A path_b=()
for i in ${path_a[@]}; do path_b[$i]=1; done
IFS=: eval 'PATH="${!path_b[*]}"'
fi
export PATH
您可以轻松地为PYTHONPATH调整此值。
请注意,关联数组是在Bash版本4中引入的,因此它们可能不适用于OSX中的默认bash。不过,你应该对其他任何现代的都很好。
另请注意,如果路径中的任何目录包含冒号,此解决方案将会中断。但是,无论如何,我认为你的道路将被打破。
另外,请注意此解决方案使用eval
,有些人认为这是危险的,不干净的,有臭味的。但是,在正确的环境中,它可以是一种很好的奶酪。