Étapes de base pour développer l'API python dans un environnement Unix

Je développe une API dans un environnement Unix pour les machines virtuelles. La plupart des modules sont développés en python. J'ai quelques questions à ce sujet.

J'ai l'extension de file comme abc.py Je voudrais faire cela comme une command. Par exemple, virtman dominfo [vmid] devrait être la syntaxe de la command. Maintenant, je dois donner ./virtman.py dominfo [vmid] pour y parvenir. Et j'ai la première ligne en tant que #!/usr/bin/python dans le file python. Alors, comment peut-il en faire une command?

Mon echo $ PATH ressemble à '/ bin: / usr / kerberos / bin: / usr / local / bin: / bin: / usr / bin0'

J'ai lu beaucoup d'articles, mais je n'ai pas eu l'image claire, donc des conseils / suggestions seraient utiles.

Vous semblez vous tromper en ce que abc.py ne serait pas un commandment. Si vous pouvez l'exécuter, alors c'est juste un avec un point dans le nom. Exécutez dans le sens que vous pouvez faire ./abc.py , donc les bits d'exécution doivent être définis. Si vous devez faire python abc.py que vous, ce n'est pas une command (encore).

En général, pour créer un file abc.py file python normal, vous devez vous assurer que la première ligne se lit comme suit:

 #!/usr/bin/env python 

(Cela suppose que vous avez /usr/bin/env comme programme, et que vous findez la command python , qui peut être dans /usr/local/bin . lien vers une version particulière de python comme python2.7 ), vous pouvez également utiliser python3 si cela est disponible en tant que command).

Après cela

 chmod +x abc.py mv abc.py abc 

Et puis vous pouvez lancer ./abc . Si le directory actuel se trouve dans votre path ou si vous déplacez abc vers un directory de votre path, vous devriez pouvoir exécuter abc de n'importe où.¹

Il y a cependant des inconvénients à renommer et déplacer le file:

  • vous ne pouvez plus from abc import SomeClass , car le file est renommé
  • Si le file est sous contrôle de révision, il se peut qu'il ne soit plus

Donc, à la place, ce que je fais normalement, c'est de créer un nouveau file /usr/local/bin/abc qui ressemble à ceci:

 #!/usr/bin/env python from abc import main main() 

et avoir au fond d' abc.py :

 def main(): doing the real stuff if __name__ == '__main__': main() 

Le directory de abc.py doit être dans le PATH python search les modules, mais de cette façon, il n'a pas besoin d'être changé et peut être utilisé par n'importe quel programme comme une import, et a commencé comme python abc.py

¹ Le mv est nécessaire pour se débarrasser du point dans le nom de la command, mais pas vraiment nécessaire, vous pouvez appeler ./abc.py si vous ne le renommez pas.

La réponse d'Anthon est correcte, mais pour les projets Python non sortingviaux, vous devriez jeter un coup d'œil au module distutils de la bibliothèque standard. Il est conçu pour déployer les modules python et exécutables sur un système de la «bonne façon», et:

  • Les développeurs Python sont familiers avec ce module (ou devraient l'être) car il se trouve dans la bibliothèque standard et les packages Python les plus connus (Django, NumPy, Celery pour n'en nommer que quelques uns) l'utilisent. Les nouveaux arrivants sauront instantanément comment déployer votre projet.

  • Une fois que vous avez défini les files et les packages que vous avez dans votre projet, exécutez python setup.py install pour déployer et mettre à jour votre package sur le système.

    Plus besoin de mettre à jour manuellement la variable PATH copiant des files dans /usr/local/bin ou en les configurant pour qu'ils soient exécutables, tout est géré pour vous!

  • Vous pouvez utiliser pip install -e pour installer votre package en mode développement.

  • C'est portable (en quelque sorte) dans les environnements Windows ou OSX.

En outre, je ne peux pas reorder l'utilisation d'un parsingur d'arguments tel que argparse si vous concevez des outils de command line.