我使用MacOSX bash
作为外壳。我有这样创建的符号链接:
ln -s /usr/bin/python python2
我有一个使用python2的软件包,我想在我当前的工作目录中创建一个/usr/bin/python
实际上是python2 的符号链接。当我python2
从命令行执行a时,出现此错误:
python2: realpath couldn't resolve "/usr/bin/python2"
但是像这样调用它./python2
可以正确解析路径。我PATH
有.
。实际上,为了进行测试,我将其修改为仅包含.
在其中。
我该如何解决?谢谢!
语境
以下建议的解决方案对我不起作用。我试图提炼出尽可能集中和简短的问题,以使人们不会淹没在文字的海洋中,但是显然我需要提供更多的背景知识。
我正在尝试从git克隆的软件包上进行开发。原始软件包,git-multimail
是/是在Linux的某些变体上开发的(我猜是Ubuntu)。我一直在尝试对其进行修改,以使其能够在MacOSX上使用它及其测试套件,而只需进行尽可能少的修改。这就是一些建议的解决方案不理想的原因:
以root
python2
身份在/ usr / bin /中创建一个符号链接。我正在寻找不需要此解决方案的解决方案。在一开始,这是一个显而易见的选择,但是我想要一个尽可能少地修改主机系统的解决方案。这就是为什么我想在当前工作目录中创建一个临时符号链接,将CWD(即.
)添加到我的路径,然后在完成时销毁它(即符号链接)。创建包装器脚本以使用现有python调用python脚本。问题在于,大多数测试套件都将实际的script_files用作可执行文件,具体取决于shebang来找到正确的执行环境。这将意味着大量编辑测试套件。在这种情况下(有关测试框架的摘要,请参见下文),我将不得不为每个
.py
文件添加一个包装器;进一步,用户/开发人员将必须了解使用软件包的不同规则,具体取决于它们所在的系统(即,在MacOSX上,请确保在不通过包装或显式调用python文件的情况下,不要使用python文件/usr/bin/python file.py
)。#! /bin/sh D=$(cd $(dirname "$0") && pwd) MULTIMAIL="$D/../git-multimail/git_multimail.py" POST_RECEIVE="$D/../git-multimail/post-receive" TESTREPO=$("$D/create-test-repo") HOME="$D" XDG_CONFIG_HOME="$D" GIT_CONFIG_NOSYSTEM=1 export HOME XDG_CONFIG_HOME GIT_CONFIG_NOSYSTEM cd $TESTREPO test_email() { REFNAME="$1" OLDREV="$2" NEWREV="$3" echo "$OLDREV" "$NEWREV" "$REFNAME" | USER=pushuser "$MULTIMAIL" }
将所有
python2
引用更改为python
。自述文件建议了这一点,但这有效地使版本控制无用,因为系统将更改视为新版本,而实际上却并非如此。
我一直在使用(3),但我正在尝试寻找更好的解决方案。我愿意接受这只是事物的本质(即没有合适的方法可以将“ python2”指向/usr/bin/python
可移植且不引人注意的方法,而无需对测试套件和实际框架进行大量更改)。
git-multimail.py
是#!/usr/bin/env python2
,所以有一种(相对)简单的方法可以做到这一点。
ln -s /usr/bin/python2.7 /usr/local/bin/python2
了
ln -s /usr/bin/python /usr/bin/python2