• トップ
  • 技術ブログ
  • Fabric のインストールでこけたときに再インストールできない問題(Cent OS 6.5)

TECHBLOGスキルブログ

Fabric のインストールでこけたときに再インストールできない問題(Cent OS 6.5)

2014.11.12

こんにちは、ユニトラストの野口です。
最近 Capistrano から Fabric に浮気しています。
Python も使えるようになったらスキルの幅が広がるかなということで、 Fabric に手を出し始めました。

いつものように Fabric をクライアントマシンにインストールしようと思ったらハマったので、記録として残しておきたいと思います。
環境は CentOS 6.5 x86_64 です。

導入編

Python の業界では真っ先に以下のパッケージツールをインストールします。

  • setuptools(easy_install)
  • pip

かの有名な Amazon Web Services で提供されているコマンドラインクライアント AWS CLI も pip でインストールできるので、Python 製のツールを使うと言ったらこれらのインストールは暗黙の了解と言ってもよいかもしれません。
御多分にもれず Fabric も pip でインストールするのですが、以下のように普通にインストールしたらエラーとなりました。

setuptools(easy_install) のインストール

wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python

pip のインストール

sudo easy_install pip

Fabric のインストール

いつもなら簡単にインストールできるはずです・・・が、

$ sudo pip install fabric
...
(snip)
...
gcc -pthread -fno-strict-aliasing -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.6 -c src/MD2.c -o build/temp.linux-x86_64-2.6/src/MD2.o
src/MD2.c:31:20: error: Python.h: No such file or directory
src/MD2.c:131: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
In file included from src/MD2.c:147:
src/hash_template.c:48: error: expected specifier-qualifier-list before ‘PyObject_HEAD’
src/hash_template.c:59: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘PyTypeObject’
src/hash_template.c: In function ‘newALGobject’:
src/hash_template.c:69: warning: implicit declaration of function ‘PyObject_New’
src/hash_template.c:69: error: expected expression before ‘ALGobject’
src/hash_template.c: At top level:
src/hash_template.c:76: error: expected ‘)’ before ‘*’ token
src/hash_template.c:91: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:110: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:122: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:162: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:188: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:190: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ALG_methods’
src/hash_template.c:199: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:225: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ALGtype’
src/hash_template.c:271: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
src/hash_template.c:304: error: array type has incomplete element type
src/hash_template.c:305: error: ‘PyCFunction’ undeclared here (not in a function)
src/hash_template.c:305: error: expected ‘}’ before ‘ALG_new’
src/hash_template.c: In function ‘init_MD2’:
src/hash_template.c:339: error: ‘PyObject’ undeclared (first use in this function)
src/hash_template.c:339: error: (Each undeclared identifier is reported only once
src/hash_template.c:339: error: for each function it appears in.)
src/hash_template.c:339: error: ‘m’ undeclared (first use in this function)
src/hash_template.c:351: error: ‘ALGtype’ undeclared (first use in this function)
src/hash_template.c:351: error: ‘PyType_Type’ undeclared (first use in this function)
src/hash_template.c:352: warning: implicit declaration of function ‘Py_InitModule’
src/hash_template.c:356: error: ‘o’ undeclared (first use in this function)
src/hash_template.c:356: warning: implicit declaration of function ‘PyInt_FromLong’
src/hash_template.c:356: warning: implicit declaration of function ‘PyDict_SetItemString’
src/hash_template.c:356: warning: implicit declaration of function ‘PyModule_GetDict’
src/hash_template.c:356: warning: implicit declaration of function ‘Py_DECREF’
src/hash_template.c:360: warning: implicit declaration of function ‘PyErr_Occurred’
src/hash_template.c:361: warning: implicit declaration of function ‘Py_FatalError’
error: command 'gcc' failed with exit status 1
----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/pycrypto/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-5Gv280-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/pycrypto
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in 
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "/usr/lib/python2.6/site-packages/pip-1.5.6-py2.6.egg/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.6/site-packages/pip-1.5.6-py2.6.egg/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 35: ordinal not in range(128)

エラーを吐いて終了していしまいました。

Python.h が存在しなくてビルドエラーとなっているため、 Python の開発ヘッダーが不足していることがわかります。
以下のよう yum でインストールして対応します。

sudo yum -y install python-devel

そしてインストールが失敗したんだから再度インストール走らせなければいけないよね、と思って再度インストールを走らせたらあっさりと終わってしまいました。

$ sudo pip install fabric
Requirement already satisfied (use --upgrade to upgrade): fabric in /usr/lib/python2.6/site-packages
Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.10 in /usr/lib/python2.6/site-packages (from fabric)
Cleaning up...

不審に思い fab コマンドを叩いてみると、

$ fab
Traceback (most recent call last):
  File "/usr/bin/fab", line 5, in 
    from pkg_resources import load_entry_point
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2880, in 
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 432, in _build_master
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 741, in require
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 626, in resolve
pkg_resources.DistributionNotFound: ecdsa>=0.11

エラーを吐き出してコマンドが終了してしまいました。
インストールできてないじゃないですかー!やだー!
小一時間悩みましたが、これはキャッシュが悪さしている可能性が高いと思い、キャッシュを無視して再インストールするオプション --ignore-installed をつけたらビルドからやり直してインストールしてくれました。

いったんアンインストール

sudo pip uninstall fabric

オプションつけて再インストール

sudo pip install --ignore-installed fabric

動作確認

$ fab --version
Fabric 1.10.0
Paramiko 1.15.1

うまくインストール出来ました!

References

  1. python – Removing pip’s cache? – Stack Overflow

              

OTHER CONTENTSその他のコンテンツ

UNITRUST会社を知る

  • 私たちについて

  • 企業情報

SERVICE事業内容

  • システム開発

  • 自社サービス

CONTACT
お問い合わせ

あなたの「想い」に挑戦します。

どうぞお気軽にお問い合わせください。

受付時間:平日9:00〜18:00 日・祝日・弊社指定休業日は除く

お問い合わせ