Estou no MacOSX usando bash
como shell. Eu tenho um link simbólico, criado assim:
ln -s /usr/bin/python python2
Eu tenho um pacote que usa python2 e quero criar um link de símbolo no meu diretório de trabalho atual para o /usr/bin/python
qual é realmente python2. Quando eu faço um a python2
partir da linha de comando, recebo este erro:
python2: realpath couldn't resolve "/usr/bin/python2"
Mas invocá-lo assim ./python2
resolve o caminho corretamente. Meu PATH
tem .
nele. Na verdade, eu o modifiquei, para teste, para ter apenas .
nele.
Como eu resolvo isso? Obrigado!
Contexto
Várias das soluções sugeridas abaixo não funcionarão para mim. Tentei destilar minha pergunta o mais focada e breve possível, para que as pessoas não se afogassem em um mar de texto, mas claramente eu preciso fornecer mais informações.
Estou tentando desenvolver um pacote que eu clonei do git. O pacote original,, git-multimail
é / foi desenvolvido em alguma variante do Linux (eu acho que o Ubuntu). Eu tenho tentado modificá-lo para poder usá-lo e sua suíte de testes no MacOSX com a menor modificação possível. Eis por que algumas das soluções propostas não são ideais:
Como root, crie um
python2
link simbólico em / usr / bin /. Estou procurando uma solução que não exija isso. Essa era uma opção óbvia no começo, mas eu gostaria de uma solução que modifique o sistema host o menos possível. É por isso que eu queria criar um link simbólico temporário no diretório de trabalho atual, adicionar o CWD (ou seja.
) ao meu caminho e destruí-lo quando terminar (ou seja, o link simbólico).Crie um script de wrapper para chamar o script python com o python existente. O problema disso é que grande parte do conjunto de testes usa os arquivos de script reais como executáveis, dependendo do shebang para encontrar o ambiente de execução correto. Isso significaria editar o conjunto de testes consideravelmente. Nesse contexto (veja abaixo um trecho da estrutura de teste), eu precisaria adicionar um wrapper para cada
.py
arquivo; além disso, o usuário / desenvolvedor teria que estar ciente de regras diferentes para usar o pacote, dependendo do sistema em que está (por exemplo, no MacOSX, verifique se você não usa os arquivos python sem invocá-los através do wrapper ou chamar explicitamente/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" }
Alterando todas as
python2
referências parapython
. O README sugere isso, mas isso efetivamente torna o controle de versão inútil, pois o sistema vê a alteração como nova versão, quando na verdade não é (semanticamente).
Estou usando (3), mas estou tentando encontrar uma solução melhor. Estou disposto a aceitar que é assim que as coisas são (ou seja, não há uma maneira adequada de apontar 'python2' para /usr/bin/python
isso é portátil e discreto, sem muitas alterações no conjunto de testes e na estrutura real).
git-multimail.py
é #!/usr/bin/env python2
, então existe uma maneira (relativamente) direta de fazer isso.
ln -s /usr/bin/python2.7 /usr/local/bin/python2
fez
ln -s /usr/bin/python /usr/bin/python2