pynautyのインストール中にエラーが発生しました:「error:コマンド 'x86_64-linux-gnu-gcc'が終了ステータス1で失敗しました」

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
1
ru de
ここでは2つの可能性があります。 1)あなたは本当に彼らがこれを作ることを提案したようにしました、そして彼らは彼らのインストーラーにバグがあるか、あなたはあなたのマシンに何か違うものを持ちますソフトウェア1)については、そこにバグを報告するか、彼らが持っているかどうか彼らのdevメーリングリストで尋ねてください。 2)のために、あなたのステップを撤回し、あなたがたどったリンク、あなたがタイプした指示など、質問にそれらをリストしてください。
追加された 著者 LIttle Ancient Forest Kami,

4 答え

完全なエラーメッセージが解決策の一部を教えてくれます。 -fPIC フラグを付けてnautyをコンパイルする必要があります。

  1. Download nauty, unzip it, cd into the dir
  2. CFLAGS=-fPIC ./configure
  3. make
  4. Download pynauty, unzip it, cd into the dir
  5. ln -s ../nauty* nauty
  6. However, the pynauty's setup.py file appears to be misconfigured: it doesn't include the correct nauty files and so will fail on import if built and installed at this point. Modify the extra_objects argument in setup.py (line 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 (if you're installing to the system, use sudo, but preferably use a virtualenv instead)

パッケージがインストールされインポート可能になった間、テストスイート全体が失敗します。これはライブラリのメンテナによって修正されるべき問題です。バグを彼らに報告することを検討してください。

1
追加された
@KonformistLiberalは正確に指示に従います。 pynautyディレクトリに入った後、nautyディレクトリにリンクします。 pynautyディレクトリに nauty リンクがあるはずです。
追加された 著者 Bart Kiers,
@KonformistLiberalあなたがシステムにインストールしようとしているようです。しないでください。 virtualenv を使用してください。本当にしたくない場合は、代わりに sudo python setup.py install を使用してください。
追加された 著者 Bart Kiers,
どこにリンクを作成すればよいですか。どっち?
追加された 著者 NewProgrammer,
すべてが7番目のステップまでうまくいきました:私はegg-infoに関する許可エラーを得ました。
追加された 著者 NewProgrammer,

あなたの編集にもかかわらず私はあなたのステップを明確にしていないあなたを仮定します。

<コード> ./configure#後でこのコマンドに注意 nauty.oを作成します。nautil.o naugraph.o ln -s ../nautyXX nauty

そしてあなたが質問の冒頭で述べたエラーに遭遇したのですが、あなたが遭遇したであろう問題よりも、デフォルトではPythonは共有ライブラリなしで設定されています。あなたがダウンロードする不幸なパッケージは、コンパイルされている共有ライブラリを探していて、何も見つけられません。

Proposed solution: run ./configure --enable-shared. That way you tell Python to actually compile them as well. You might run into trouble depending on what shared libs you have there, but can't say anything but speculation without knowing more on your side.

出典:

Githubリンクをお勧めします。ここで最も明確にしています。

1
追加された
--enable-shared configure の認識されるオプションではないようです
追加された 著者 Bart Kiers,
あなたが今話していたことを私は見ています、あなたはUbuntuのPythonが --enable-shared で設定されるべきであることを意味しました。答えを読んだとき、それはあまり明確ではありませんでした。
追加された 著者 Bart Kiers,
ln -s ../nautyXX nauty はOPの設定では ln -s ../nauty25r9 nauty に置き換えてください。 > ln -s/nauty25r9 nauty
追加された 著者 Harvey,
@davidismのオプションは時間とともに変化しますが、投稿する前に、私は実際にPythonのドキュメントに行き、それらを再読しました。私はPython 2.3からそれがあったと思います。もちろん、誰でも自由に独自のconfigureスクリプトを作ることができます。それにもかかわらず、あなたはあなたの応答にすでにそれを釘付けにしたようです。それが解決し、virtualenvが+1であることを嬉しく思います。
追加された 著者 LIttle Ancient Forest Kami,
最初の質問から私が問題を置いたところですが、私はショートカットを選び、Pythonとpynautyの両方のインストール用にconfigureを1つ配置しました。オプションがまったくないかもしれません。あなたが入ってくれてうれしい。
追加された 著者 LIttle Ancient Forest Kami,

いいえ、しないでください。執筆者であるPeterDobcsányiは、このバージョンは本質的にバグが多いため、正しい結果を生み出すことはできないと述べました(特に 'certify'機能において)。

彼は最近、新しいバージョン0.6.0をリリースしました( https://web.cs.dal.ca/~peter/software/pynauty/pynauty-0.6.0.tar.gz )このバージョンは絶対に正しいものであり、Python 2.7および最新のNautyと互換性があります。

私はそれをテストしました、そしてすべてがうまくいきます

1
追加された

davidismの答えに加えて、私はPython 2.7とnauty25r9を使ってpynauty 0.5をコンパイルしたときに私が得た警告のためにテストが壊れることを考え出しました:

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を再コンパイルしてください。警告が消え、テストに合格するはずです。

0
追加された