Я пытаюсь установить пакет pynauty Python. Когда я запустил python setup.py build
, я получил следующую ошибку. Я установил зависимости. Как я могу успешно установить этот пакет 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
Нет, Пожалуйста, не делайте этого таким образом! Автор pynauty, Питер DobcsГЎnyi сказал мне, что эта версия неотъемлемо buggish и не приведет к правильным результатам (особенно, в 'удостоверяют' функцию).
Он недавно выпустил совершенно новую версию, 0.6.0 ( https://web.cs.dal.ca / ~ peter/software/pynauty/pynauty-0.6.0.tar.gz ), и эта версия абсолютно правильна и совместима с Пайтоном 2.7 и новый Nauty!
я проверил, что, и все хорошо работает
Я не ясен на Ваших шагах несмотря на Ваше редактирование. Принятие Вас:
cd aDirectory/nauty04/
(или иначе (c) висел (d) irectory к нему
./configure # note this command for later
make nauty.o nautil.o naugraph.o
ln -s ../nautyXX nauty
и столкнулся с ошибкой, которую Вы описали во вводном абзаце Вашего вопроса, чем проблема, с которой Вы, скорее всего, столкнулись, то, что Python по умолчанию настроен без общих библиотек. Неудачный пакет, который Вы загружаете, ищет общую скомпилированную библиотеку и не находит ни один.
Предлагаемое решение: работает ./configure --enable-shared
. Тем путем Вы говорите Python на самом деле компилировать их также. Вы могли бы столкнуться с проблемой в зависимости от того, что совместно использовало, освобождает Вас, имеют там, но ничего не может сказать кроме предположения, не зная больше на Вашей стороне.
Источники:
я рекомендую ссылку GitHub, он больше всего разъясняется здесь.
Полное сообщение об ошибке говорит Вам часть решения: необходимо скомпилировать nauty с эти -fPIC
флаг.
CFLAGS=-fPIC ./configure
make
ln -s ../nauty* nauty
Однако pynauty's setup.py
, файл, кажется, неправильно конфигурируется: это не включает корректные nauty файлы и так перестанет работать на импорте, если создано и установлено в этой точке. Измените extra_objects
аргумент в setup.py
(строка 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
(если Вы устанавливаете на системе, используйте sudo
, но предпочтительно используйте virtualenv вместо этого) , В то время как пакет теперь установлен и разрешен к ввозу, все сбои набора тестов. Это - проблема, которая должна быть устранена специалистом по обслуживанию библиотеки; рассмотрите сообщение об ошибке им.
В дополнение к ответу davidism я выяснил, что тесты сломаны из-за предупреждения, что я добрался, собирая pynauty 0.5, используя Пайтона 2.7 и 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(
, Чтобы зафиксировать это предупреждение, изменение
int i,j;
в src/pynauty.c
к
Py_ssize_t i;
int j;
и повторно собрать pynauty. Предупреждение должно исчезнуть, и тесты должны пройти!