我在服务器上运行一些 python 脚本,它们位于 cvs 存储库下,并且由于各种原因使用绝对路径名。
我正在尝试使用 eclipse 作为编辑器 - 我检查了项目,但是在运行它们时我发现文件不在代码期望的位置。(例如'/home/staff/root/analysis/test.txt'而不是'../test.txt')
有没有办法让 eclipse 欺骗 python 认为存在不同的目录结构?如果我对 '/home/staff/root/analysis/' 进行全局查找/替换 '..',这可以解决问题,但它看起来不太像专家……
有任何想法吗?
答案1
我无法从最狭义的角度回答你的问题。但我有两个建议可能会达到同样的效果。
建议 1:符号链接
如果文件依赖关系植根于一个公共树(或少数树),您可能能够创建指向相应文件的符号链接。因此,假设您希望 /home/staff/root/analysis/test.txt 解析为 /path/to/working/directory/test.txt,那么您可以执行以下操作:
$ sudo ln -fns /path/to/working/directory /home/staff/root/analysis
这需要 root 权限。效果是整个路径前缀 /home/staff/root/analysis 将解析为 /path/to/working/directory。这适用于前缀下的文件以及所有子目录。
建议2:支持运行时依赖项的配置选项
如果文件确实是运行时或测试所必需的,则它们应该是包的一部分。准确描述如何做到这一点超出了本答案的范围,但这里有一些资源,您可能已经很清楚了:
- 专家 Python 编程http://goo.gl/YoDx6
- 使用 SafeConfigParser 解析 conf/ini 文件(例如,data-dir=/home/staff/root/analysis)
- 使用 argparse 从命令行/覆盖 conf 获取选项(例如,--data-dir=..)
答案2
如果您想将硬编码的相对路径更改为绝对路径,您可以随时使用任何编辑器(sed)编辑文本,但我怀疑这是否是您真正需要的。
问题可能在于您在运行某些程序时所处的目录并不在该工具所期望的目录中,一个简单的 os.chdir 应该可以让您改变这一点。
如果没有,请遵循 Reece 的建议。