Je suis sur MacOSX en utilisant bash
mon shell. J'ai un lien symbolique, créé comme ceci:
ln -s /usr/bin/python python2
J'ai un paquet qui utilise python2 et je veux créer un lien de symbole dans mon répertoire de travail actuel vers /usr/bin/python
lequel est en fait python2. Lorsque je fais un à python2
partir de la ligne de commande, j'obtiens cette erreur:
python2: realpath couldn't resolve "/usr/bin/python2"
Mais l'invoquer comme ça ./python2
résout le chemin correctement. Mon PATH
a .
dedans. En fait je l'ai modifié, pour le tester, pour ne l'avoir .
qu'en lui.
Comment résoudre ça? Merci!
Le contexte
Un certain nombre des solutions suggérées ci-dessous ne fonctionneront pas pour moi. J'ai essayé de distiller ma question de la manière la plus ciblée et la plus brève possible afin que les gens ne se noient pas dans une mer de texte, mais je dois clairement fournir plus d'informations.
J'essaie de développer sur un package que j'ai cloné depuis git. Le package d'origine,, git-multimail
est / a été développé sur une variante de Linux (je suppose Ubuntu). J'ai essayé de le modifier pour pouvoir l'utiliser et sa suite de tests sur MacOSX avec le moins de modifications possible. Voici pourquoi certaines des solutions proposées ne sont pas idéales:
En tant que root, créez un
python2
lien symbolique dans / usr / bin /. Je cherche une solution qui n'exigerait pas cela. C'était une option évidente au début, mais j'aimerais une solution qui modifie le moins possible le système hôte. C'est pourquoi je voulais créer un lien symbolique temporaire dans le répertoire de travail actuel, ajouter le CWD (ie.
) à mon chemin, puis le détruire une fois terminé (ie le lien symbolique).Créez un script wrapper pour appeler le script python avec le python existant. Le problème avec cela est qu'une grande partie de la suite de tests utilise les fichiers de script réels comme exécutables, selon shebang pour trouver l'environnement d'exécution correct. Cela impliquerait de modifier considérablement la suite de tests. Dans ce contexte, (voir ci-dessous pour un extrait du cadre de test), je devrais ajouter un wrapper pour chaque
.py
fichier; en outre, l'utilisateur / développeur devrait être conscient des différentes règles d'utilisation du package selon le système sur lequel il se trouve (c'est-à-dire sur MacOSX, assurez-vous de ne pas utiliser les fichiers python sans les appeler via le wrapper ou appeler explicitement/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" }
Changer toutes les
python2
références àpython
. Le README le suggère, mais cela rend le contrôle de version inutile car le système voit le changement comme une nouvelle version, alors qu'en fait ce n'est pas (sémantique).
J'utilise (3) mais j'essaie de trouver une meilleure solution. Je suis prêt à accepter que c'est juste ainsi que les choses sont (c'est-à-dire qu'il n'y a pas de moyen approprié de pointer «python2» vers ce /usr/bin/python
qui est portable et discret sans beaucoup de changements dans la suite de tests et le cadre réel).
git-multimail.py
c'est le cas #!/usr/bin/env python2
, il existe donc un moyen (relativement) simple de le faire.
ln -s /usr/bin/python2.7 /usr/local/bin/python2
fait
ln -s /usr/bin/python /usr/bin/python2