2012-05-05 2 views
4

Je suis à la recherche d'une réponse dès maintenant pour un certain temps, mais cela me donne vraiment des maux de tête:programme python exécution

J'utilise Ubuntu 12.04 et je veux exécuter un script Python à partir du terminal sans en utilisant le chemin complet. donc j'ajouté/home/Kyril/python/scripts/à la variable PATH à travers la mise ce qui suit dans ./bashrc:

kyrilpathvariable="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/kyril/Python/scripts/:/home/kyril/Bash/scripts" 

if [ "$kyrilpathvariable" = "$PATH" ]; then 
    echo PATH already exported 

else 

PATH=$PATH:/home/kyril/Python/scripts/ 
PATH=$PATH:/home/kyril/Bash/scripts/ 
export PATH 

fi 

(Je sais que si l'article est pas nécessaire, mais je n'aimais pas avoir tout deux fois dans mon PATH si je tape exec bash.)

Maintenant le problème: cela fonctionne parfaitement pour mes scripts Bash, donc après les avoir rendus exécutables via chmod, je peux simplement taper $ script.sh et il est exécuté. Cependant si je tape $ python3 script.py l'erreur suivante est levée: python3: can't open file 'script.py': [Errno 2] No such file or directory

si je tape dans le chemin complet au script cela fonctionne. Quelqu'un a une idée de ce que je fais de mal? Dois-je ajouter le répertoire au PYTHONPATH? (Comme je l'ai compris cela aide seulement pour l'importation de modules).

Merci les gars!

+1

Pourquoi voulez-vous lancer 'python3 script.py' au lieu de' script.py '? – robert

Répondre

5

Lorsque vous appelez python3 directement, python exécute le fichier script que vous lui avez demandé, sans utiliser $PATH pour le trouver. PYTHONPATH n'est pas pertinent - c'est utilisé pour rechercher des modules Python.

Je suppose que vous rencontrez des problèmes avec le mauvais interpréteur appelé lorsque vous exécutez script.py par lui-même. Je ne sais pas ce que la première ligne de votre script est, mais il devrait être ceci:

#!/usr/bin/env python3 

Ou si vous avez besoin de contrôle encore plus fin:

#!/usr/bin/env python3.2 

Et pour les scripts Python 2:

#!/usr/bin/env python2 

Ou:

#!/usr/bin/env python2.7 

Vous devez vérifier que ces exécutables existent sur votre système avant d'essayer de les utiliser.

+0

Merci! J'avais #!/Usr/bin/python3, donc cela a résolu mon problème! – YumTum

0

Je suppose que les variables de chemin sont ignorées lorsque python recherche le fichier d'entrée. Python commence à chercher 'script.py' dans le répertoire courant, ne sachant pas qu'il y a une variable de chemin déclarée pour ce fichier, et ne peut donc pas le trouver.

Malheureusement, je ne suis pas sûr de savoir comment le résoudre, mais peut-être quelqu'un de plus expérimenté avec des variables peut nous éclairer?

0
python3 $(type -P script.py) 

Bash Raconte à regarder dans le PATH pour le fichier exécutable et de fournir son emplacement et le nom.

Par exemple:

$ type -P script.py 
/usr/local/bin/script.py 
0

Pour éviter les doublons dans le chemin, vous pouvez faire:

for dir in Python Bash; do 
    dir_to_add="$HOME/$dir/scripts" 
    case ":$PATH:" in 
    *:"$dir_to_add":*) ;; # path already contains dir, do nothing 
    *) PATH+=":$dir_to_add" ;; 
    esac 
done 
+0

Merci! C'est un peu plus élégant que ce que j'ai fait :) – YumTum