86 votes

setup.py et ajouter le fichier à /bin/

Je n'arrive pas à trouver comment faire setup.py ajouter un script au dossier de l'utilisateur. /bin ou /usr/bin ou autre.

Par exemple, je voudrais ajouter un myscript.py à /usr/bin afin que l'utilisateur puisse appeler myscript.py à partir de n'importe quel répertoire.

0 votes

Essayez cet exemple . Par défaut, python setup.py install installera mon_projet dans /usr/local/bin . Pour supprimer l'installation, exécutez python setup.py install --record files.txt qui génère des fichiers.txt, puis supprimez ces chemins par rm

76voto

DataGreed Points 1675

Envisagez d'utiliser console_scripts :

from setuptools import setup
setup(name='some-name',
      ...
      entry_points = {
              'console_scripts': [
                  'command-name = package.module:main_func_name',                  
              ],              
          },
)

main_func_name est une fonction principale de votre module principal. command-name est un nom sous lequel elle sera enregistrée dans /usr/local/bin/ (habituellement)

1 votes

Si vous exécutez pip3 install --editable . il installera la commande à /home/{username}/.local/bin . Si vous exécutez sudo pip3 install --editable . il installera la commande dans /usr/local/bin/

0 votes

Sur un Mac, cela s'installe également dans le répertoire du framework ( /Library/Frameworks/Python.framework/Versions/3.7/bin pour moi), mais pas sous /usr (où mon pip y python sont)

20voto

Danny Lessio Points 528

Il y a deux façons d'obtenir un outil de ligne de commande fonctionnel à partir de setuptools et de l'infrastructure PyPI :

  1. L'argument du mot clé "scripts". Argument de mot-clé
    Cela permet l'exécution en ligne de commande de tout ce que vous voulez, cela peut être un script Python, un script shell ou quelque chose de complètement différent.
  2. Point d'entrée "console_scripts
    Cela permet aux fonctions Python (et non aux scripts !) d'être directement enregistrées comme outils accessibles en ligne de commande.

0 votes

Hélas la première méthode mettra scripts qui ont probablement une extension ".py" dans le répertoire bin ET (je pense) ne seront pas ajustés pour virtualenvs. U-G-L-Y. Le mieux est d'utiliser console_scripts.

0 votes

@Chris Cogdon, l'extension .py n'est pas nécessaire, du moins pas pour les systèmes *nix (j'ai un shebang en haut du fichier). Vous avez raison de dire que les environnements virtuels ne se comportent pas bien - vous devez aller dans le répertoire bin de l'environnement pour trouver votre exécutable. Mais vous pouvez l'exécuter à partir de là.

15voto

wh1tney Points 1007

Si vous êtes prêt à construire et à installer l'ensemble du paquetage python, voici comment je m'y prendrais :

  • Modifiez la fonction setup() dans setup.py pour qu'elle contienne un paramètre nommé scripts et définissez son argument comme étant l'emplacement du ou des fichiers que vous souhaitez exécuter à partir de n'importe quel endroit. par ex.

setup(name='myproject',author='',author_email='',scripts=['bin/myscript.py'])

  • Dans le répertoire qui contient setup.py, créez un répertoire bin en tapant mkdir bin
  • Ajoutez myscript.py à ce fichier nouvellement créé. bin (et assurez-vous qu'il est exécutable !).
  • cd dans le répertoire qui contient le fichier setup.py, et installez tout le paquetage python en tapant python setup.py install
  • Une fois le paquetage installé, vous devriez être en mesure d'exécuter myscript.py depuis n'importe quel endroit du système !

0 votes

Que faire si je veux omettre l'extension py ? En fait, la pratique consistant à ajouter le code source dans le répertoire bin est quelque peu discutable.

0 votes

@DataGreed Si vous voulez omettre l'extension .py...omettez-la :) tant que le fichier est exécutable, l'extension peut être omise et vous pouvez simplement exécuter myscript à partir de la ligne de commande. Pardonnez ma naïveté, mais pourquoi l'ajout du code source dans le répertoire bin est-il discutable ?

0 votes

C'est une décision très, très étrange. Bin devrait contenir les builds, pas les sources.

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