[英]Fatal error when trying to install PyCrypto on OS X El Capitan
我正在嘗試在OS X 10.11.3(El Capitan)上安裝PyCrypto。 我使用的是Python 3.5.1。 我從https://pypi.python.org/pypi/pycrypto下載了gzip文件並對其進行了解壓縮。 然后我按照說明運行python setup.py build
,它似乎做了一些事情,然后它產生了這個輸出:
/usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -fwrapv -Wall -Wstrict-prototypes -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/MD2.c -o build/temp.macosx-10.6-intel-2.7/src/MD2.o
src/MD2.c:30:10: fatal error: 'string.h' file not found
#include <string.h>
^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
我嘗試了python3 setup.py build
並獲得了一些非常相似的輸出:
/usr/bin/clang -fno-strict-aliasing -Wsign-compare -Wunreachable-code -fno-common -dynamic -fwrapv -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library/Frameworks/Python.framework/Versions/3.5/include/python3.5m -c src/MD2.c -o build/temp.macosx-10.6-intel-3.5/src/MD2.o
src/MD2.c:30:10: fatal error: 'string.h' file not found
#include <string.h>
^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
我試着谷歌去弄清楚要做什么,但我找不到任何有用的東西。 我該如何安裝PyCrypto?
編輯:我還嘗試了幾個其他的東西,如pip install pycrypto
和sudo pip3 install pycrypto
,他們沒有工作。 @ l'L'l幫助我通過做幾件奇怪的,復雜的事情讓我開始工作,這些東西雖然我自己也沒有。 它們總結在下面的答案中。
您正在嘗試的手動構建看起來可能會失敗,因為它引用了您可能沒有的OS X 10.6 SDK,並且在很大程度上已經過時了。 此外,SDK現在存儲在與10.6 SDK處於最佳狀態時完全不同的位置。
新SDK位置:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
舊SDK位置:
/Developer/SDKs/
由於看起來在嘗試構建PyCrypto時,它引用了MacOSX10.6.sdk
因此需要考慮以下幾點:
除非我們仔細審核源代碼,否則我們可能無法准確知道錯誤標志的設置位置,但我們可以盡力處理我們所擁有的信息。 從錯誤中我們可以看到有幾個實例會彈出10.6 SDK的名稱:
/usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -fwrapv -Wall -Wstrict-prototypes -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library
從源頭構建:
/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/MD2.c -o build/temp.macosx-10.6-intel-2.7/src/MD2.o
src/MD2.c:30:10: fatal error: 'string.h' file not found
#include <string.h>
^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
分析一下,我們可以看到PyCrypto的MD2.c文件試圖使用標志-isysroot /Developer/SDKs/MacOSX10.6.sdk
。 可能值得嘗試pip
:
用pip安裝:
...
fatal error: 'string.h' file not found #include <string.h>
...
同樣的錯誤; 我們應該知道系統上是否存在<string.h>
標頭 - 讓我們快速測試C
應用程序來找出:
測試C頭:
$ echo "#include <string.h>
#include <stdio.h>
int main() { printf(\"TEST\n\"); return 0; }" > t.c
$ clang t.c -o t
$ ./t
TEST
很明顯,標題確實存在,因為測試工作正常。 這告訴我們問題更可能直接與10.6 SDK相關(系統上似乎不存在)。
符號化(不存在)10.6 SDK到10.11 SDK:
由於我們尚未確定SDK實際設置的位置,因此我們將繼續嘗試創建符號鏈接,以便舊的10.6 SDK的任何引用鏈接到最新的SDK(此時為10.11):
$ cd /Developer/SDKs
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk MacOSX10.6.sdk
我們可以通過發出以下命令來驗證符號鏈接:
$ ls -lat
total 8
drwxr-xr-x 3 root wheel 102 Feb 21 15:54 .
lrwxr-xr-x 1 root wheel 99 Feb 21 15:54 MacOSX10.6.sdk -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
drwxr-xr-x 3 root wheel 102 Feb 21 15:52 ..
現在我們已經成功創建了符號鏈接,讓我們再次嘗試使用pip安裝PyCrypto:
$ sudo pip install pycrypto
Collecting pycrypto
Downloading pycrypto-2.6.1.tar.gz (446kB)
100% |████████████████████████████████| 446kB 1.2GB/s
Installing collected packages: pycrypto
Running setup.py install for pycrypto ... done
Successfully installed pycrypto-2.6.1
沒錯! 看起來我們的問題已經解決了! 好吧,差不多......
我們仍然需要弄清楚在構建期間設置錯誤(10.6)SDK的原因。 讓我們使用xcrun
工具查看默認設置:
$ xcrun --show-sdk-version
10.11
系統默認SDK設置為10.11,因此必須通過Python,PyCrypto或我們可能未考慮的其他一些異常將其設置為10.6。
在進行一些重新調查之后,發現Python 3似乎是使用OS X 10.6 SDK構建的。 此外,它還將SDK設置為10.6並在整個Python_Framework
中的許多位置設置(過時的)路徑。 有這么多的參考資料,我不打算將它們全部列出來,盡管這是一個例子:
Python_Framework Folder/Versions/3.5/lib/python3.5/config-3.5m/Makefile:79:CONFIGURE_CFLAGS= -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk
我只能假設開發人員試圖盡可能向后兼容,但不幸的是,它在這個過程中突破了兼容性。
筆記:
使用pip
安裝Python軟件包可以通過很多方式(包管理,更新,卸載等)使生活變得更加輕松。 例如,安裝PyCrypto只需要發出命令:
$ sudo pip install pycrypto
如果您有多個Python ,則可以使用版本號為該Python安裝:
$ sudo pip3.5 install pycrypto
↳https : //pip.pypa.io/en/stable/installing/
當我運行pip install pycrypto
時,我在OSX El Capitan上遇到了可能相關的問題。 我看到RuntimeError: autoconf error
。 我所要做的就是運行sudo xcodebuild -license
並在審核許可協議后輸入agree
。 之后我能夠使用pip來安裝pycrypto。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.