web-dev-qa-db-fra.com

Erreur lors de l'installation de bcrypt avec pip sur OS X: impossible de trouver ffi.h (libffi est installé)

J'obtiens cette erreur lorsque j'essaie d'installer bcrypt avec pip. J'ai installé libffi dans quelques endroits (le SDK Xcode OS X et de homebrew), mais je ne sais pas comment dire à pip de le chercher. Aucune suggestion?

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
36
Cody

Sans utiliser Sudo et CFLAGS et CPPFLAGS (inutile pour pip):

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

Je l'ai finalement fait fonctionner avec ce qui suit avec un peu d'aide de theseposts :

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
21
Cody

Xcode a déjà été installé pour moi (comme mentionné dans la question elle-même, il fournit l'en-tête ffi.h), mais pour une raison quelconque, il n'a pas rempli/usr/include (comme l'a mentionné Zachary Young). J'ai fouillé pour voir pourquoi/usr/include n'était pas rempli et j'ai trouvé que la commande suivante le corrigeait:

$ xcode-select --install

Manquant/usr/include après l'installation de Yosemite et Xcode?

15
T A

Mise à jour 26/août/15

Je pense que la réponse de TA est meilleure dans la mesure où elle est gérée par le système.


Tout d'abord, je déteste installer Brew ou Ports, mais c'est un autre problème.

J'ai essayé de pip install cryptography, qui dépend de cffi, qui importe ffi.h.

Je suis curieux de savoir pourquoi personne ne s'est adressé à lui (et moi, et je crois que d'autres) ont ffi installé avec Xcode:

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

car l'erreur concerne spécifiquement "ne pas trouver" ffi.h avec la commande de génération suivante:

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

J'ai ffi.h, c'est juste que le système pense qu'il devrait être dans /usr/include/....

Ma /usr/include le répertoire est vide et n'est lié à rien, donc je viens de lier le répertoire/fichier en question, à l'endroit où il n'est pas trouvé:

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

Je peux maintenant installer et construire cffi et cryptographie.

Je suis très novice en ce qui concerne la compréhension de la dynamique de la chaîne de construction/liaison, et si cela est mauvais, je ne comprends pas ... alors, faites-le moi savoir.

3
Zachary Young