2014-04-05 40 views
35

我在尝试使用pip安装bcrypt时遇到此错误。我在几个地方安装了libffi(Xcode OS X SDK和自制软件),但我不知道如何告诉pip来寻找它。有什么建议么?在OS X上使用pip安装bcrypt时出错:找不到ffi.h(libffi已安装)

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 

回答

78

不使用sudo和CFLAGS以及CPPFLAGS(不需要PIP):

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

你是一位光滑的水手! – CodeMode

+0

我用这个建议让'sudo pip install cryptography'在osx上工作。谢谢! – ThinkBonobo

+1

没有设置PKG_CONFIG_PATH – Mykel

21

我终于得到它带有一点点的帮助下工作从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 
+1

这个答案是确定的,但CFLAGS CPPFLAGS和未使用如此设置它们是不必要的。另外,请勿使用sudo安装pip软件包。请参阅下面的答案。 – nathancahill

+0

我怀疑这是因为修复了较新版本的pip软件包,使得这些标志不必要。简单地按照你答案中的步骤,在我写答案的时候建立了失败,但是现在他们没有。我会将你的标记标记为已接受。 – Cody

3

更新26/Aug/15

我认为TA的答案更好,因为它是由系统处理的。


首先,我讨厌安装的Brew或端口,但这是另一个问题。

我一直试图pip install cryptography,这取决于cffi,其中导入ffi.h

我很好奇,为什么没有人讨论他(和我,我相信其他人)有ffi在Xcode安装:由于错误

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

是专门关于“没有找到” ffi.h与下面的生成命令:

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 

我有ffi.h,它只是系统认为它应该是/usr/include/...

/usr/include目录恰好是空的,不挂任何东西,所以我只是挂有问题的目录/文件,到它不被人发现的地方:

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

我现在可以安装和建立cffi和密码学。

当谈到理解构建链/链接动态时,我很新手,如果这是不好的,我不明白它......所以,请让我知道。

15

已经为我安装了Xcode(正如问题中提到的那样,它确实提供了ffi.h头文件),但由于某些原因,没有填充/ usr/include(如Zachary Young提到的)。我周围挖看到USR /没有被填充为什么/ include和发现下列命令固定它:

$ xcode-select --install 

Missing /usr/include after Yosemite and Xcode install?

+1

谢谢您的发现,我觉得这比手动链接更好。 –