开发人员在同一项目的不同 SVN 分支上工作时如何设置他们的环境路径,这样他们每次从一个分支切换到另一个分支时都不需要设置他们的路径?
我是一名 Python 开发人员,我发现自己在同一个项目的不同分支上工作,当我从一个分支切换到另一个分支时,每次导出 PYTHONPATH 都非常难看。
也就是说,如果您的 IDE 没有自动为您执行此操作(我正在使用 vim)。
开发人员在同一项目的不同 SVN 分支上工作时如何设置他们的环境路径,这样他们每次从一个分支切换到另一个分支时都不需要设置他们的路径?
我是一名 Python 开发人员,我发现自己在同一个项目的不同分支上工作,当我从一个分支切换到另一个分支时,每次导出 PYTHONPATH 都非常难看。
也就是说,如果您的 IDE 没有自动为您执行此操作(我正在使用 vim)。
对于另一种选择,您可以使用符号链接,然后让您的环境变量指向它。像:
branch1/
branch2/
current -> branch1/
然后,如果您想在 branch2 上工作,只需将“当前”指向它。您的环境变量将指向“当前”。
所以你的工作流程是将单独的分支保存在单独的工作目录中?很好,这是一个非常合理的 Subversion 工作流程。
就我个人而言,我会更改源代码控制中的任何 Python 程序,以查找它们自己的库并sys.path
在导入任何内容之前进行修改;这样,无论他们搬到哪里,他们都可以工作。
#!/usr/bin/env python
import os, sys
basedir = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.join(basedir, 'lib'))
如果你不这样做,你可以在你的~/bin
或其他任何地方放置一个包装器可执行文件$PATH
,
#!/bin/bash
dir=$(pwd)
while [[ $dir != / ]]; do
if [[ -d "$dir/lib" ]]; then
export PYTHONPATH="$dir/lib${PYTHONPATH:+:$PYTHONPATH}"
break
fi
dir="${dir%/*}"
done
if (($# > 0)); then exec "$@"; fi
它只是在运行您想要的任何内容之前四处寻找要添加的lib
目录$PYTHONPATH
。也许将其命名为“ py
”。
$ cd dir1 # dir1/lib 存在 $ py ./我的程序 $ cd ../dir2 # dir2/lib 存在 $ py ./我的程序
也可以有一个工作流,您可以将其留在单个工作目录中,svn sw
用于更改分支。由于您的路径永远不会改变,PYTHONPATH
即使分支更改,设置一次也将保持有效。
(这是git、 monotone 、 hg 等常用的工作流程)