Selon le système, python
== python2
ou python
== python3
.
Scripts Python exécutables, commence par:
#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...
Pour python py3k, il est fourni dans la documentation que je devrais / peux utiliser avec le numéro de version , donc je fais ceci:
#!/usr/bin/env python3
Mais j'ai trouvé un problème avec les scripts py2k.
Alors que dans la documentation py2k il est écrit à l' utilisation: #! /usr/bin/env python
,
sur certains * nix-es, python py3k est par défaut, donc python == python3. (Par exemple , le package python ArchLinux , ici les fichiers du package python ).
Comment empaqueter (configurer, créer) et / ou préparer des scripts python pour la distribution pour gérer cela?
Je pose des questions sur la création de progiciels pouvant être exécutés facilement par les utilisateurs (sans modifier leur environnement)
Puis - je faire la même astuce pour les scripts python py2k comme pour les scripts Py3K python et le définir comme: #!/usr/bin/env python2
? Puis-je être sûr que chaque distribution python py2k contient un python2
fichier, alors #!/usr/bin/env python2
cela fonctionnera-t-il?
Si oui, pourquoi n'est-il pas proposé en standard, par exemple dans la documentation python py2k ?
la source
python2
pour l'exécuter (s'il est installé), et vous pouvez toujours vérifier la version avecpython -V
. si vous voulez quepython
ce soit 2 ou 3, vous devriezrm /usr/bin/python
puis créer un lien symbolique qui pointe à partir de votre version python desierd par exempleln -s /usr/bin/python2.5 /usr/bin/python
.python2
. Je me demande pourquoi il n'est pas standard de l'utiliser quand il y a py2k et py3k et que la valeur par défautpython
peut différer. Qu'en est-il de vos conseils sur le retrait - ce n'est pas approprié à cet exemple, car je pose des questions sur l'emballage. Je voudrais créer un package pouvant fonctionner dans différentes configurations / systèmes. Aucun moyen de modifier l'environnement. Qu'en est-il de la vérification - cela ne s'applique pas à Shebang - pour autant que je sache.#!...python2
dans vos programmes et si vous utilisez Python 3.x, puis utilisez#!...python3
. Ne comptez pas sur le système d'exploitation pour avoir le bon lien si vous savez qu'il ne fonctionnera que sur une version spécifique. Je travaille avec des systèmes sur lesquels Python 1.5.2 est toujours installé/usr/bin/python
- j'écris du code pour gérer les anciennes versions de Python ou j'utilisepython2
.python2
exécutable sur mon système (Debian squeeze).python
est un lien symbolique verspython2.6
, etpython3
est un lien symbolique verspython3.1
, mais il n'y a paspython2
.Réponses:
Un script peut vérifier sa version Python et, s'il s'agit de Python 3, se redémarrer à l'aide de Python 2. Ajoutez ce qui suit près de la tête du script:
Cela utilise la
which
commande du système pour localiserpython2
dans l'environnementPATH
. Il se relance ensuite avec cela (ou s'interrompt s'il est incapable de le trouver).Notez que le script doit être une syntaxe Python 3 valide pour qu'il démarre dans Python 3.
De plus, toute sortie doit être vidée avant l'
execv
appel, sinon elle sera perdue. L'ajout, par exemple,sys.stdout.flush()
juste avant l'appel àexecv
videra toutes lesprint
instructions.la source
Sur les anciennes versions, il peut juste être au
python
lieu depython2
. Pour rendre votre ligne de sheebang plus claire, vous pouvez créer un lienpython2 -> python
que vous pouvez utiliser#!/usr/bin/env python2
.la source
Je pense que le "standard" est défini dans https://www.python.org/dev/peps/pep-0394/
la source