2 votes

Construire un snap python2 avec snapcraft, erreur python setup.py egg_info

MODIFIER : Il semble que le but du setup.py est de produire un package pour Mac OSX avec py2app. La question est donc maintenant : Comment empêcher le plugin python de snapcraft d'appeler setup.py ?

Je cherche à créer un snap pour une application python, à la fois pour apprendre snap, et parce que cette application n'existe que sous forme de paquet deb 14.04, qui ne s'installera pas sur mon système plus récent. Remarquez que je suis assez nouveau en python et totalement nouveau en snaps...

L'application est Iramuteq, provenant de iramuteq.org

Le fichier de package control existant ressemble à ceci :

Source: iramuteq
Standards-Version: 0.1.8
Section: science
Priority: extra
Maintainer: Pierre Ratinaud 
Build-Depends: debhelper (>= 7)
Homepage: http://www.iramuteq.org

Package: iramuteq
Architecture: all
Depends: python (>= 2.7), r-base (>= 3.0.0), python-wxgtk2.8 (>= 2.8), python-xlrd (>= 0.6), python-ooolib, r-cran-rgl (>= 0.79)
Description: Interface de R pour les analyses multidimensionnelles

Donc, si je comprends bien, j'ai besoin de certaines bibliothèques python, et je devrais intégrer le package r-cran-rgl.

Voici le fichier snapcraft.yaml que j'ai créé :

name: iramuteq # vous voulez probablement 'snapcraft register '
version: '0.7-alpha2' # juste pour les humains, généralement '1.2+git' ou '1.3.2'
summary: INTERFACE R pour l'analyse multidimensionnelle des textes et questionnaires # résumé long de 79 caractères
description: |
  IRAMUTEQ est un logiciel sous licence GNU GPL (v2) qui fournit aux utilisateurs
  une analyse statistique sur un corpus de texte et des tableaux composés par individus/mots.
  Il est basé sur le logiciel R et sur le langage python.
grade: devel # doit être 'stable' pour être publié dans les canaux candidat/stable
confinement: devmode # utiliser 'strict' une fois que vous avez les bons plugs et slots

apps:
  iramuteq:
    command: iramuteq

parts:
  iramuteq:
    source: http://www.iramuteq.org/git/iramuteq
    source-type: git
    plugin: python
    python-version: 'python2'
    python-packages:
      - ooolib
      - xlrd
      - wxgtk2.8
    stage-packages:
      - r-base # (>= 3.0.0)
      - r-cran-rgl  #(>= 0.79)

En exécutant snapcraft, je reçois l'erreur suivante :

Processing /home/franck/iramuteq/snap/parts/iramuteq/src
  Le lien est un répertoire, en ignorant download_dir
    Sortie complète de la commande python setup.py egg_info:
    avertissement : aucun répertoire correspondant à 'doc/_static' n'a été trouvé
    avertissement : aucun répertoire correspondant à 'doc/_templates' n'a été trouvé
    avertissement : aucun fichier précédemment inclus correspondant à '.DS_Store' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*.pyc' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*.pyo' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*.so' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*.dSYM' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*.dSYM/*' n'a été trouvé dans la distribution
    avertissement : aucun fichier précédemment inclus correspondant à '*__pycache__*' n'a été trouvé dans la distribution
    aucun répertoire précédemment inclus correspondant à 'examples/*/build' n'a été trouvé
    aucun répertoire précédemment inclus correspondant à 'examples/*/dist' n'a été trouvé
    aucun répertoire précédemment inclus correspondant à 'examples/*/*/build' n'a été trouvé
    aucun répertoire précédemment inclus correspondant à 'examples/*/*/dist' n'a été trouvé
    aucun répertoire précédemment inclus correspondant à 'examples/*/*/*/build' n'a été trouvé
    aucun répertoire précédemment inclus correspondant à 'examples/*/*/*/dist' n'a été trouvé
    Traceback (most recent call last):
      File "", line 1, in 
      File "/tmp/pip-9UlL_H-build/setup.py", line 21, in 
        setup_requires=['py2app'],
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/usr/lib/python2.7/distutils/core.py", line 111, in setup
        _setup_distribution = dist = klass(attrs)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/dist.py", line 317, in __init__
        self.fetch_build_eggs(attrs['setup_requires'])
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/dist.py", line 372, in fetch_build_eggs
        replace_conflicting=True,
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/pkg_resources/__init__.py", line 851, in resolve
        dist = best[req.key] = env.best_match(req, ws, installer)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1123, in best_match
        return self.obtain(req, installer)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1135, in obtain
        return installer(requirement)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/dist.py", line 440, in fetch_build_egg
        return cmd.easy_install(req)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 674, in easy_install
        return self.install_item(spec, dist.location, tmpdir, deps)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 700, in install_item
        dists = self.install_eggs(spec, download, tmpdir)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 881, in install_eggs
        return self.build_and_install(setup_script, setup_base)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1120, in build_and_install
        self.run_setup(setup_script, setup_base, args)
      File "/home/franck/iramuteq/snap/parts/iramuteq/install/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1108, in run_setup
        raise DistutilsError("Le script de configuration s'est terminé avec %s" % (v.args[0],))
    distutils.errors.DistutilsError: Le script de configuration s'est terminé avec une erreur : Cette distribution n'est prise en charge que sur MacOSXdistuitls error.

    ----------------------------------------
Commande "python setup.py egg_info" a échoué avec le code d'erreur 1 dans /tmp/pip-9UlL_H-build/

Maintenant, je suis bloqué avec une erreur de distutils... et je ne suis pas sûr non plus si R sera (devrait être ?) intégré à mon snap, ou installé sur mon système principal.

1voto

user.dz Points 45060

Eh bien, vous avez déclaré plugin: python donc bien sûr snapcraft essaiera de lancer setup.py. Utilisez un autre plugin, comme make si ce projet a un Makefile. BTW, make sert à exécuter essentiellement make; make install

Cependant, avant de faire cela, consultez le fichier debian/rules qui est le makefile pour le paquet source Debian. Voyez comment ils ont vraiment réalisé la construction précédente.

Mise à jour: Je viens de vérifier le fichier debian/rules, il contient des commandes d'installation manuelle.

Des options qui pourraient fonctionner pour votre cas:

  1. dump (ou OBSOLÈTE copy) plugin.

  2. Sinon, aidez le projet amont à rendre setup.py fonctionnel pour GNU/Linux aussi ou ajoutez un Makefile.

  3. (Pourrait être le meilleur choix) Utilisez le plug que vous préférez avec des commandes personnalisées pour: prepare:, build: & install: à partir de Plugins - Mots-clés communs

Il est recommandé d'inclure tous les binaires nécessaires (comme R) afin qu'il ne soit pas interrompu lors des mises à jour et lorsque la confinement strict est appliqué.

Pour répondre:

Lors de la première exécution, l'application installe des plugins R en utilisant le propre système de paquet de R. Est-ce que cela peut être géré avec Snap ?

Oui.

  • Si ces paquets sont bien définis lors de la construction, les options 2 et 3 permettent d'utiliser la commande R pour les installer et les inclure dans le paquet snap.

  • Si ces paquets ne peuvent être installés que lors de l'exécution, alors configurez R pour utiliser SNAP_COMMON ou SNAP_DATA qui sont inscriptibles après le déploiement. snap montera le core en lecture seule.

Il peut y avoir d'autres options, je creuse encore pour comprendre comment fonctionne snap.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X