

cygwinでansibleインストールエラーになります。

[code]

        In file included from /usr/include/python2.7/pyport.h:332:0,
                     from /usr/include/python2.7/Python.h:58,
                     from src/MD2.c:31:
    /usr/include/sys/time.h:104:34: エラー: 不明な型名 ‘u_int’ です
     bintime_mul(struct bintime *_bt, u_int _x)
                                      ^
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
    Rolling back uninstall of pycrypto
    Command "/usr/bin/python -u -c "import setuptools,
    tokenize;__file__='/tmp/pip-b                                                                                              
    uild-v0y9C7/pycrypto/setup.py';exec(compile(getattr(tokenize, 'open', open)(__fi                                                                                              
    le__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pi                                                                                              
    p-0H8nOx-record/install-record.txt --single-version-externally-managed --compile                                                                                              
    " failed with error code 1 in /tmp/pip-build-v0y9C7/pycrypto/
    
[/code]

pycryptoのインストールでこけているようです。


CC BY-SA 3.0
2016-06-03T00:19:27.493
25400
2016-06-03T13:23:56.617
7593
question
python cygwin ansible
cygwinでansibleインストールエラー


/usr/include/sys/time.h  
でu_intを再定義するように追加することで、  
インストールができました。

vi /usr/include/sys/time.h

[code]

    #ifndef u_int
    typedef unsigned int u_int;
    #endif
    
[/code]


CC BY-SA 3.0
2016-06-03T00:19:27.493
25401
2016-06-03T00:19:27.493
7593
25400
answer


ansibleは「なにそれ、美味しいの?」という自分ですが、cygwinでのpycryptoのビルドはやったことがあるので、ちょっと調べてみました。  
すでに解決済みのようなので余計かもしれませんが、情報共有のため投稿します。

pycrypto-2.6.1のソースをビルドすると、同様のエラーになりますね。  
(cygwinは、先日アップデートした状態です)

[code]

    $ python setup.py build
    warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
    In file included from /usr/include/python2.7/Python.h:8:0,
                     from src/MD2.c:31:
    /usr/include/python2.7/pyconfig.h:1216:0: 警告: "__BSD_VISIBLE" が再定義されました
     #define __BSD_VISIBLE 1
     ^
    In file included from /usr/include/sys/config.h:5:0,
                     from /usr/include/_ansi.h:16,
                     from /usr/include/string.h:10,
                     from src/MD2.c:30:
    /usr/include/sys/features.h:250:0: 備考: ここが以前の宣言がある位置です
     #define __BSD_VISIBLE  0
     ^
    In file included from /usr/include/python2.7/pyport.h:332:0,
                     from /usr/include/python2.7/Python.h:58,
                     from src/MD2.c:31:
    /usr/include/sys/time.h:104:34: エラー: 不明な型名 ‘u_int’ です
     bintime_mul(struct bintime *_bt, u_int _x)
                                      ^
    error: command 'gcc' failed with exit status 1
    
[/code]

一年ぐらい前に同じバージョンをインストールした際は、問題なかったと思うのですがねぇ…。

エラーを見る限り、pycryptoの問題、というよりも、cygwinのpythonの問題のような気がしたので、ちょっと調べてみましたが、pythonの拡張モジュールをビルドする際に、

  * 「Python.h」の前に標準ライブラリのヘッダをインクルードしている。
  * 「-std=c99」オプションを付加している。

という条件があるとエラーになるようです。

[code]

    $ cat hoge.c
    #include <string.h>
    #include <Python.h>
    
    $ gcc -c hoge.c -std=c99 `python-config --cflags` 
    In file included from /usr/include/python2.7/Python.h:8:0,
                     from hoge.c:2:
    /usr/include/python2.7/pyconfig.h:1216:0: 警告: "__BSD_VISIBLE" が再定義されました
     #define __BSD_VISIBLE 1
     ^
    In file included from /usr/include/sys/config.h:5:0,
                     from /usr/include/_ansi.h:16,
                     from /usr/include/string.h:10,
                     from hoge.c:1:
    /usr/include/sys/features.h:250:0: 備考: ここが以前の宣言がある位置です
     #define __BSD_VISIBLE  0
     ^
    In file included from /usr/include/python2.7/pyport.h:332:0,
                     from /usr/include/python2.7/Python.h:58,
                     from hoge.c:2:
    /usr/include/sys/time.h:104:34: エラー: 不明な型名 ‘u_int’ です
     bintime_mul(struct bintime *_bt, u_int _x)
                                      ^
    
[/code]

既に解決はされているようですが、システムのヘッダをいじるのはちょっと気持ち悪いので、他の提案もしておきます。

## cygwinのpycryptoパッケージを使用する。

cygwinに「python-crypto」というパッケージが用意されているので、setup.exeからインストールしてください。

ただし、python3用のパッケージは無いようです。  
(自分も、昔はそれが理由で自分でビルドしてインストールした気がします)

## setup.pyを修正してインストールする。

pycrypto-2.6.1のソースコードをダウンロードし展開、「setup.py」の118行目辺りに「-std=c99」オプションを指定している箇所があるので、コメントアウトします。

[code]

            if self.compiler.compiler_type in ('unix', 'cygwin', 'mingw32'):
                # Tell GCC to compile using the C99 standard.
                #self.__add_compiler_option("-std=c99") # ここをコメント
    
[/code]

インストールします。

[code]

    python setup.py install
    
[/code]

これで、インストールできると思います。(自分は、ビルドまでしかしていませんが)


CC BY-SA 3.0
2016-06-03T13:23:56.617
25423
2016-06-03T13:23:56.617
15473
25400
answer