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
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
Le message d'erreur complet vous indique une partie de la solution: vous devez compiler Nauty avec l'indicateur -fPIC
.
CFLAGS=-fPIC ./configure
make
ln -s ../nauty* nauty
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'],
python setup.py build
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.
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!