web-dev-qa-db-fra.com

Erreur lors de l'installation de pynauty: «erreur: la commande 'x86_64-linux-gnu-gcc' a échoué avec le statut de sortie 1»

J'essaie d'installer le package pynauty Python. Quand j'ai exécuté python setup.py build, j'ai eu l'erreur suivante. J'ai installé les dépendances. Comment installer avec succès ce package Python?

$ python setup.py build
running build
running build_py
running build_ext
building 'pynauty._pynauty' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Inauty -Isrc -I/usr/include/python2.7 -c src/pynauty.c -o build/temp.linux-x86_64-2.7/src/pynauty.o -O4
In file included from src/pynauty.c:16:0:
nauty/nauty.h:40:0: warning: "_FILE_OFFSET_BITS" redefined
 #define _FILE_OFFSET_BITS 0
 ^
In file included from /usr/include/python2.7/pyconfig.h:3:0,
                 from /usr/include/python2.7/Python.h:8,
                 from src/pynauty.c:15:
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h:1157:0: note: this is the location of the previous definition
 #define _FILE_OFFSET_BITS 64
 ^
src/pynauty.c: In function ‘_make_nygraph’:
src/pynauty.c:363:33: warning: passing argument 2 of ‘PyDict_Next’ from incompatible pointer type
     while (PyDict_Next(adjdict, &i, &key, &adjlist)) {
                                 ^
In file included from /usr/include/python2.7/Python.h:101:0,
                 from src/pynauty.c:15:
/usr/include/python2.7/dictobject.h:114:17: note: expected ‘Py_ssize_t *’ but argument is of type ‘int *’
 PyAPI_FUNC(int) PyDict_Next(
                 ^
src/pynauty.c: In function ‘init_pynauty’:
src/pynauty.c:537:15: warning: variable ‘m’ set but not used [-Wunused-but-set-variable]
     PyObject *m;
               ^
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/pynauty.o nauty/nauty.o nauty/nautil.o nauty/naugraph.o -o build/lib.linux-x86_64-2.7/pynauty/_pynauty.so
/usr/bin/ld: nauty/nauty.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
nauty/nauty.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
1
Konformist Liberal

Non, s'il vous plaît ne le faites pas de cette façon! Peter Dobcsányi, auteur de pynauty, m'a dit que cette version est intrinsèquement déréglée et ne produira pas de résultats corrects (en particulier dans la fonction 'certify').

Il a récemment publié la nouvelle version 0.6.0 ( https://web.cs.dal.ca/~peter/software/pynauty/pynauty-0.6.0.tar.gz ) et cette version. est absolument correct et compatible avec Python 2.7 et le plus récent de Nauty!

J'ai testé cela et tout fonctionne bien

1
Vast Academician

Le message d'erreur complet vous indique une partie de la solution: vous devez compiler Nauty avec l'indicateur -fPIC.

  1. Téléchargez nauty, décompressez-le, cd dans le répertoire
  2. CFLAGS=-fPIC ./configure
  3. make
  4. Téléchargez pynauty, décompressez-le, cd dans le répertoire
  5. ln -s ../nauty* nauty
  6. Cependant, le fichier setup.py de pynaute semble être mal configuré: il n'inclut pas les fichiers de navigation corrects et échouera donc lors de l'importation si construit et installé à ce stade. Modifiez l'argument extra_objects dans setup.py (ligne 37):

    # from
    extra_objects = [ nauty_dir + '/' + 'nauty.so', ],
                          nauty_dir + '/' + 'nautil.o',
                          nauty_dir + '/' + 'naugraph.o'
                        ],
    # change it to
    extra_objects = [nauty_dir + '/' + 'nauty.a'],
    
  7. python setup.py build

  8. python setup.py install (si vous installez sur le système, utilisez Sudo, mais utilisez de préférence un virtualenv )

Alors que le paquet est maintenant installé et importable, toute la suite de tests échoue. C'est un problème qui devrait être résolu par le responsable de la bibliothèque; envisagez de leur signaler le bogue.

1
davidism

En plus de la réponse du davidisme, j’ai compris que les tests étaient rompus à cause d’un avertissement que j’avais reçu lors de la compilation de pynauty 0.5 avec Python 2.7 et nauty25r9:

src/pynauty.c: In function ‘_make_nygraph’:
src/pynauty.c:363:33: warning: passing argument 2 of ‘PyDict_Next’ from incompatible pointer type
     while (PyDict_Next(adjdict, &i, &key, &adjlist)) {
                                 ^
In file included from /usr/include/python2.7/Python.h:101:0,
                 from src/pynauty.c:15:
/usr/include/python2.7/dictobject.h:114:17: note: expected ‘Py_ssize_t *’ but argument is of type ‘int *’
 PyAPI_FUNC(int) PyDict_Next(

Pour corriger cet avertissement, modifiez

int i,j;

dans src/pynauty.c à

Py_ssize_t i;
int j;

et recompiler pynauty. L'avertissement devrait disparaître et les tests devraient réussir!

0
user458646