Я использую MacOSX в bash
качестве оболочки. У меня есть символическая ссылка, созданная так:
ln -s /usr/bin/python python2
У меня есть пакет, который использует python2, и я хочу создать символьную ссылку в моем текущем рабочем каталоге, к /usr/bin/python
которому фактически относится python2. Когда я делаю python2
из командной строки, я получаю эту ошибку:
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, не вызывая их через оболочку или явно вызывая/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
. README предлагает это, но фактически делает управление версиями бесполезным, поскольку система видит изменение как новую версию, хотя на самом деле это не так (семантически).
Я использовал (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