8
votes

Script de configuration de package Python Installez l'exécutable binaire

J'ai un paquet awesomepkg avec setup.py . J'aimerais installer un exécutable binaire AwesomeoTool à la ligne de commande avec le package lui-même lorsque les utilisateurs exécutent pip installez Awesomepkg . J'ai compilé différentes versions OS pour AwesomeTool , qui vit dans un dossier bin / à côté de setup.py .

Cependant, je ne trouve pas un bon moyen de configurer setup.py . J'ai tenté ce qui suit:

  1. Utilisez le scripts = [] mot-clé dans Configuration () . Malheureusement, l'exécutable doit être un script Python.

  2. Alors j'essaie d'envelopper le binaire dans un script Python à l'aide de OS.System ('bin / awesomeool') pour déléguer. Il échoue également car le script wrapper est copié ailleurs par pip, de sorte qu'il ne sait pas où le chemin relatif bac / awesomeool est.

  3. Une autre solution potentielle est le mot-clé data_files . Toutefois, pour une raison quelconque, les fichiers de données ne sont pas copiés à Site_Packages INSTALLATION DIR, même si exécutant python setup.py bdist_wheel dit qu'ils ont été copiés.

    Référence: https://docs.python.org/3/distutils/setupscript. HTML


0 commentaires

3 Réponses :


6
votes

Je viens de courir dans ce numéro moi-même. Ma solution était de trois fois.

  1. J'ai ajouté le programme, par ex. AwesomeTool code>, à ma structure de colis afin que je puisse l'ajouter via le fichier package_data ​​code> mot-clé: package_data = {'awesomepkg': ['Awesomeool']} code>. Cela le fait réellement être copié dans le même dossier que la principale init forte >py lors de l'installation. P> li>

  2. J'ai fait un script Python similaire à votre étape 2. Toutefois, au lieu du chemin relatif, j'ai d'abord importer awesomepkg code> et utilisez awesomepkg .__ path __ code> pour obtenir Le chemin absolu avec le dossier d'installation pour le package. Cela ressemblerait à: p>

    import awesomepkg
    import subprocess as sp
    import sys
    
    path = awesomepkg.__path__[0]
    command = path + "/awesometool"
    sp.call([command] + sys.argv)
    
  3. J'ai ajouté ce script sur les scripts code> code> Mot clé de Configuration () CODE> P> LI> ol> p>


2 commentaires

Buscipant peu pour résumer, vous avez fait un script de wrapper Python et l'a ajouté au scripts Beyworkd of Configuration () .


J'ai couru dans le problème ici, je reçois une erreur autorisation refusée en raison de la propriété du fichier binaire. Comment puis-je aborder ce problème?



0
votes

de dans un paquet peut utiliser xxx


0 commentaires

1
votes

Pour ajouter sur la réponse de Nick Porubsky:

  1. Assurez-vous que les fichiers binaires ont obtenu l'exécution du drapeau activé lorsque vous leur validez chmod + x
  2. Assurez-vous d'avoir un shebang sur votre script Bash afin qu'il sait d'exécuter avec Python

    Un exemple de ceci peut être trouvé ici. https://github.com/housekeepltd/pywkher/commit/0bad81240F16479550E2B1BF2C1185A20D3CEE29


0 commentaires