python - pkg - libffi pc
Error al instalar bcrypt con pip en OS X: no se puede encontrar ffi.h(se instala libffi) (4)
Sin usar sudo y CFLAGS y CPPFLAGS (innecesarios para pip):
$ brew install pkg-config libffi
$ export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.0.13/lib/pkgconfig/
$ pip install bcrypt
Me aparece este error al intentar instalar bcrypt con pip. Tengo libffi instalado en un par de lugares (el Xcode OS X SDK y homebrew), pero no sé cómo decirle a pip que lo busque. ¿Alguna sugerencia?
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
Actualización 26 / Aug / 15
Creo que la respuesta de TA es mejor ya que es manejada por el sistema.
En primer lugar, detestaba instalar Brew o Ports, pero ese es otro problema.
He intentado pip install cryptography
, que depende de cffi, que importa ffi.h
Tengo curiosidad por saber por qué nadie se dirigió a él (y a mí, y a mí, a otros) y me he instalado con Xcode:
locate ffi.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ffi/ffi.h
ya que el error es específicamente sobre "no encontrar" ffi.h
con el siguiente comando de compilación:
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
Tengo ffi.h
, es solo que el sistema cree que debería estar en /usr/include/...
Mi directorio /usr/include
está vacío y no está vinculado a nada, así que simplemente vinculé el directorio / archivo en cuestión, al lugar donde no se encuentra:
ln -fs {THAT_XCODE_SDK_FFI_PATH_FROM_ABOVE} /usr/include/ffi
Ahora puedo instalar y construir cffi y criptografía.
Soy muy novato cuando se trata de entender la dinámica de la cadena de construcción / vinculación, y si esto es malo, no lo entiendo ... así que, por favor, háganmelo saber.
Finalmente lo conseguí trabajando con lo siguiente con un poco de ayuda de estas publicaciones :
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
Xcode ya estaba instalado para mí (como se menciona en la pregunta en sí mismo que sí proporciona el encabezado ffi.h), pero por alguna razón eso no completó / usr / include (como mencionó Zachary Young). Busqué para ver por qué el / usr / include no estaba poblado y encontré que el siguiente comando lo solucionó:
$ xcode-select --install
¿Falta / usr / include después de la instalación de Yosemite y Xcode?