108 votes

Différence entre entry_points/console_scripts et scripts dans setup.py ?

Il y a essentiellement deux façons d'installer la console Python scripts dans mon chemin en setup.py :

setup(
    ...
    entry_points = {
        'console_scripts': [
            'foo = package.module:func',
        ],
    }
)

et

setup(
    ...
    scripts = [
        'scripts/myscript.sh'
    ]
)

Quelles sont les différences ? Je vois que la première approche me permet de choisir un nom agréable et spécifique pour mon script, mais y a-t-il d'autres différences ? Différents objectifs originaux, compatibilité (setuptools, distutils, ... ?), utilisation, ... ? Je suis assez confus et une réponse bien élaborée pourrait m'aider (et probablement aussi d'autres) à bien comprendre tout cela.

Mise à jour : Puisque j'ai posé la question PyPA publié sur ces documents intéressants sur le sujet .

61voto

jfeala Points 596

Les documents relatifs au paquet Click (génial) suggérer quelques raisons pour utiliser des points d'entrée au lieu de scripts, notamment

  1. la compatibilité multiplateforme et
  2. en évitant que l'interprète attribue __name__ à __main__ ce qui pourrait entraîner une double importation du code (si un autre module importe votre script).

Click est un bon moyen d'implémenter des fonctions à utiliser en tant que entry_points au fait.

16voto

plessthanpt05 Points 179

L'une des principales différences entre ces deux méthodes de création d'exécutables en ligne de commande est qu'avec la commande setuptools (votre premier exemple), vous devez appeler une fonction à l'intérieur du script -- dans votre cas, il s'agit de la fonction func à l'intérieur de votre module . Cependant, dans le distutils approche (votre deuxième exemple) vous appelez directement le script (qui permet d'être listé avec ou sans extension).

10voto

Kaushik Ghose Points 267

L'approche du point d'entrée des outils d'installation (#1) a aussi l'avantage que sous Windows, un fichier .exe sera créé et pourra être invoqué en double-cliquant dessus comme un programme Windows ordinaire. Ceci est en plus d'avoir un script placé dans le chemin bin sur les systèmes posix-like.

5voto

spacether Points 370

Une autre différence est que, lorsque j'utilise console_scripts, le module __init__ a été exécuté. Lorsque l'on utilise uniquement scripts, le module __init__ n'a pas été exécuté, seul le script a été exécuté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X