Я на 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 з якомога меншими змінами. Ось чому деякі із запропонованих рішень не є ідеальними:
Як корінь, створіть
python2
симпосилання в / usr / bin /. Я шукаю рішення, яке б цього не вимагало. Це було очевидним варіантом на початку, але я хотів би рішення, яке міняє хост-систему якомога менше. Ось чому я хотів створити тимчасове посилання в поточній робочій директорії, додати CWD (тобто.
) до мого шляху, а потім знищити це, коли закінчиться (тобто symlink).Створіть скрипт обгортки для виклику сценарію 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