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
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
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?
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.