2014-04-05 111 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

謝謝您的發現,我覺得這比手動鏈接更好。 –