2014-04-05 32 views
35

Tôi gặp phải lỗi này khi cố cài đặt bcrypt bằng pip. Tôi có libffi cài đặt trong một vài nơi (Xcode OS X SDK, và từ homebrew), nhưng tôi không biết làm thế nào để nói với pip để tìm nó. Bất kỳ đề xuất?Lỗi cài đặt bcrypt với pip trên OS X: không thể tìm thấy ffi.h (libffi được cài đặt)

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 

Trả lời

78

Nếu không sử dụng sudo và CFLAGS và CPPFLAGS (không cần thiết cho pip):

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

Bạn là một thủy thủ trơn tru! – CodeMode

+0

Tôi đã sử dụng lời khuyên này để có được 'sudo pip install cryptography' để làm việc trên osx. Cảm ơn! – ThinkBonobo

+1

Làm việc mà không cần thiết lập PKG_CONFIG_PATH – Mykel

21

Cuối cùng tôi đã nhận nó làm việc với những điều sau với một chút giúp đỡ từ 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

Câu trả lời này là ok, nhưng CFLAGS và CPPFLAGS là chưa sử dụng để thiết lập chúng là không cần thiết. Ngoài ra, không sử dụng sudo để cài đặt một gói pip. Xem câu trả lời của tôi dưới đây. – nathancahill

+0

Tôi nghi ngờ điều này là do các bản sửa lỗi trong các phiên bản mới hơn của gói pip làm cho những lá cờ đó không cần thiết. Đơn giản chỉ cần làm theo các bước trong câu trả lời của bạn đã cho tôi xây dựng thất bại tại thời điểm tôi đã viết câu trả lời, nhưng bây giờ họ không. Tôi sẽ đánh dấu của bạn là được chấp nhận. – Cody

3

Cập nhật 26/Aug/15

Tôi nghĩ câu trả lời của TA là tốt hơn vì nó được xử lý bởi hệ thống.


Trước hết, tôi không thích cài đặt Brew hoặc Cổng nhưng đó là một vấn đề khác.

Tôi đã cố gắng pip install cryptography, tùy thuộc vào cffi, nhập khẩu ffi.h.

Tôi tò mò tại sao không ai đề cập rằng ông (và tôi, và tôi tin rằng những người khác) đã ffi cài đặt với Xcode:

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

kể từ khi lỗi là đặc biệt về "không tìm thấy" ffi.h với việc xây dựng sau lệnh:

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 

tôi có ffi.h, nó chỉ là hệ thống nghĩ rằng nó phải ở trong /usr/include/....

thư mục /usr/include My xảy ra là trống rỗng, và không liên quan đến bất cứ điều gì, vì vậy tôi chỉ liên kết thư mục/tập tin trong câu hỏi, đến nơi mà nó không được tìm thấy:

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

bây giờ tôi có thể cài đặt và xây dựng cffi và mật mã.

Tôi rất mới làm quen với hiểu biết về động lực chuỗi liên kết/xây dựng, và nếu điều này là xấu, tôi không hiểu ... vì vậy, hãy cho tôi biết.

15

Xcode đã được cài đặt cho tôi (như đã đề cập trong câu hỏi chính nó là nó cung cấp tiêu đề ffi.h), nhưng vì một số lý do không điền/usr/include (như Zachary Young đã đề cập). Tôi đào xung quanh để xem lý do tại sao/usr/bao gồm không được dân cư và phát hiện ra rằng các lệnh sau cố định nó:

$ xcode-select --install 

Missing /usr/include after Yosemite and Xcode install?

+1

Cảm ơn bạn đã tìm thấy điều đó, tôi cảm thấy điều đó tốt hơn nhiều so với liên kết thủ công. –

Các vấn đề liên quan