2014-04-05 13 views
35

Ich bekomme diesen Fehler, wenn ich versuche, bcrypt mit pip zu installieren. Ich habe libffi an ein paar Orten installiert (das Xcode OS X SDK und von Homebrew), aber ich weiß nicht, wie ich pip sagen soll, um danach zu suchen. Irgendwelche Vorschläge?Fehler bei der Installation von bcrypt mit pip unter OS X: ffi.h kann nicht gefunden werden (libffi ist installiert)

Downloading/unpacking bcrypt==1.0.2 (from -r requirements.txt (line 41)) 
    Running setup.py egg_info for package bcrypt 
    OS/X: confusion between 'cc' versus 'gcc' (see issue 123) 
    will not use '__thread' in the C code 
    c/_cffi_backend.c:14:10: fatal error: 'ffi.h' file not found 
    #include <ffi.h> 
      ^
    1 error generated. 
    Traceback (most recent call last): 
     File "<string>", line 16, in <module> 
     File "/Users/cody/virtualenvs/analytics/build/bcrypt/setup.py", line 104, in <module> 
     "Programming Language :: Python :: 3.3", 
     File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 112, in setup 
     _setup_distribution = dist = klass(attrs) 
     File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 239, in __init__ 
     File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 264, in fetch_build_eggs 
     File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 620, in resolve 
     dist = best[req.key] = env.best_match(req, ws, installer) 
     File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 858, in best_match 
     return self.obtain(req, installer) # try and download/install 
     File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 870, in obtain 
     return installer(requirement) 
     File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 314, in fetch_build_egg 
     File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 593, in easy_install 

     File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 623, in install_item 

     File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 811, in install_eggs 

     File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 1017, in build_and_install 

     File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 1005, in run_setup 

    distutils.errors.DistutilsError: Setup script exited with error: command 'cc' failed with exit status 1 
    Complete output from command python setup.py egg_info: 
    OS/X: confusion between 'cc' versus 'gcc' (see issue 123) 

will not use '__thread' in the C code 

c/_cffi_backend.c:14:10: fatal error: 'ffi.h' file not found 

#include <ffi.h> 

     ^

1 error generated. 

Traceback (most recent call last): 

    File "<string>", line 16, in <module> 

    File "/Users/cody/virtualenvs/analytics/build/bcrypt/setup.py", line 104, in <module> 

    "Programming Language :: Python :: 3.3", 

    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 112, in setup 

    _setup_distribution = dist = klass(attrs) 

    File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 239, in __init__ 

    File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 264, in fetch_build_eggs 

    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 620, in resolve 

    dist = best[req.key] = env.best_match(req, ws, installer) 

    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 858, in best_match 

    return self.obtain(req, installer) # try and download/install 

    File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 870, in obtain 

    return installer(requirement) 

    File "build/bdist.macosx-10.9-intel/egg/setuptools/dist.py", line 314, in fetch_build_egg 

    File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 593, in easy_install 



    File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 623, in install_item 



    File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 811, in install_eggs 



    File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 1017, in build_and_install 



    File "build/bdist.macosx-10.9-intel/egg/setuptools/command/easy_install.py", line 1005, in run_setup 



distutils.errors.DistutilsError: Setup script exited with error: command 'cc' failed with exit status 1 

---------------------------------------- 
Command python setup.py egg_info failed with error code 1 in /Users/cody/virtualenvs/analytics/build/bcrypt 

Antwort

78

Ohne mit sudo und CFLAGS und CPPFLAGS (nicht notwendig für pip):

$ brew install pkg-config libffi 
$ export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.0.13/lib/pkgconfig/ 
$ pip install bcrypt 
+3

Sie ein ruhiger Segler! – CodeMode

+0

Ich habe diesen Ratschlag verwendet, um 'sudo pip install cryptography' auf osx zu installieren. Vielen Dank! – ThinkBonobo

+1

Arbeitete ohne Einstellung der PKG_CONFIG_PATH – Mykel

21

Ich habe es endlich mit dem folgenden mit einer wenig Hilfe von theseposts arbeiten:

brew install pkg-config libffi 
sudo bash 
export CFLAGS=-Qunused-arguments 
export CPPFLAGS=-Qunused-arguments 
export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.0.13/lib/pkgconfig/ 
pip install bcrypt 
+1

Diese Antwort ist in Ordnung, aber die CFLAGS und CPPFLAGS ungenutzt so einstellen ihnen ist unnötig. Verwenden Sie auch nicht Sudo, um ein Pip-Paket zu installieren. Siehe meine Antwort unten. – nathancahill

+0

Ich vermute, das liegt an Korrekturen in neueren Versionen des pip-Pakets, die diese Flags überflüssig machen. Wenn Sie einfach die Schritte in Ihrer Antwort befolgt haben, habe ich zu dem Zeitpunkt, als ich die Antwort geschrieben habe, Fehler gemacht, aber jetzt tun sie es nicht. Ich werde deine als akzeptiert markieren. – Cody

3

Update 26/Aug/15

Ich denke, die Antwort von TA ist besser, weil sie vom System gehandhabt wird.


Zunächst einmal möchte ich Brew oder Ports installieren, aber das ist ein anderes Problem.

Ich habe versucht, pip install cryptography, die auf cffi abhängt, die ffi.h importiert.

Ich bin neugierig, warum niemand angesprochen, dass er (und mir, und ich andere glauben) haben ffi mit Xcode installiert:

locate ffi.h 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ffi/ffi.h 

da der Fehler ist speziell über ffi.h mit folgendem Build „nicht finden“ Befehl:

c/_cffi_backend.c:14:10: fatal error: 'ffi.h' file not found 
#include <ffi.h> 
... 
... 
/usr/bin/clang ...{omitted}... I/usr/include/ffi -I/usr/include/libffi 

ich ffi.h haben, es ist nur, dass das System denkt, dass es in /usr/include/... sein sollte.

Mein /usr/include Verzeichnis geschieht leer zu sein, und nicht zu irgendetwas verbunden, so dass ich verknüpfen nur das Verzeichnis/Datei in Frage, an den Ort, wo es nicht gefunden wird:

ln -fs {THAT_XCODE_SDK_FFI_PATH_FROM_ABOVE} /usr/include/ffi 

kann ich jetzt installieren und build cffi und kryptographie.

Ich bin sehr Anfänger, wenn es darum geht, Build-Chain/Linking-Dynamik zu verstehen, und wenn das schlecht ist, bekomme ich es nicht ... also lass es mich wissen.

15

Xcode wurde bereits für mich installiert (wie in der Frage selbst erwähnt, dass es die ffi.h Header zur Verfügung stellt), aber aus irgendeinem Grund nicht gefüllt/usr/include (wie Zachary Young erwähnt). Ich grub, um zu sehen, warum der/usr/include nicht aufgefüllt wurde und festgestellt, dass der folgende Befehl es fest:

$ xcode-select --install 

Missing /usr/include after Yosemite and Xcode install?

+1

Vielen Dank für das Finden, dass ich fühle, dass das viel besser ist als manuelle Verknüpfung. –