2016-11-12 145 views
2

我試圖在virtualenv中的mac os 10.12上使用pip在python 2.7.10中安裝mod_wsgi。我打算在Django 1.10.3中使用它。 當我運行「PIP安裝mod_wsgi的」我得到以下輸出:pip install mod_wsgi在virtualenv中失敗

Collecting mod_wsgi 
Using cached mod_wsgi-4.5.7.tar.gz 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 247, in <module> 
    APR_INCLUDES = get_apr_includes().split() 
    File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 219, in get_apr_includes 
    stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/ 

我是新來VIRTUALENV所以它可能是我只是缺少與如何設置了一些東西。我試過升級pip,通過pip重新安裝setuptools和ez_setup。

+0

您是否安裝了Xcode命令行工具? ''xcode-select --install''表示它們在運行時被安裝嗎? –

+0

運行該命令提示我運行安裝。我繼續安裝命令行工具。儘管在運行pip install mod_wsgi時,我仍然遇到同樣的問題。 –

+0

程序「/ usr/sbin/apxs」存在嗎?你可以在你係統的任何地方找到''apxs''嗎?可以使用''find/-name apxs''。 Apple在每次新的主要操作系統更新時都會中斷Apache模塊和mod_wsgi的安裝,並且這次看起來他們沒有在正常位置安裝「apxs」。 –

回答

8

在MacOS X Sierra上安裝mod_wsgi有兩個問題。

第一個問題是,當能夠安裝第三方Apache模塊時,Apple提供了完全不可用的默認Apache安裝。這建立在他們之前在MacOS X版本中已經存在的障礙之上,這意味着您必須跳過箍環才能正常工作。

這種情況下的問題是Apple已經從Xcode發行版中刪除了apr-1-configapu-1-config程序。這意味着當對某些存在的Apache配置進行特定類型的查詢時,apxs將會失敗。這是爲Apache構建第三方模塊所需的信息。不知道在哪裏安裝頭文件,Apache模塊的構建將失敗。

鑑於蘋果公司破壞了在每次操作系統更新中安裝額外Apache模塊的能力,並且從未修復過操作系統的生命週期,因此需要解決方法,他們不太可能再次解決此問題。

在其他論壇一個建議,要解決這個問題,是同釀APR和APU包,然後從符號鏈接與apr-1-configapu-1-config方案納入apxs正在尋找的位置。這對我來說看起來很容易出錯,因爲看起來模塊可能會針對brew頭文件進行編譯,而這些可能與操作系統Apache安裝提供的庫版本不匹配。這可能導致崩潰。

因此唯一有保證的解決方案不是使用隨操作系統提供的Apache安裝。

所以一個選項可能是使用brew來安裝Apache並使用Apache的brew安裝(不僅僅是brew的APR和APU)。

如果使用pip install mod_wsgi的方法,另一個選擇是首先使用pip可安裝Apache爲mod_wsgi提供。

pip install -vvv mod_wsgi-httpd 

只有在沒有選擇的情況下才能使用它,並且您應該始終使用系統Apache(如果可以的話)。現在我們似乎沒有選擇。

這會將Apache安裝到Python安裝或虛擬環境中。編譯/安裝APR/APU/Apache以及其他可能需要的庫也需要一些時間。我正在使用-vvv,所以你可以看到它在編譯,否則你可能會認爲它已經掛起。

一旦完成,然後運行pip install mod_wsgi

這僅在使用mod_wsgi-express時有用。如果你想使用編譯後的mod_wsgi和操作系統Apache,你就不能使用它,因爲這樣構建的模塊將與操作系統Apache不兼容。

第二個問題是MacOS X Sierra更改了操作系統API以獲取進程任務信息。這將意味着mod_wsgi 4.5.7及更早版本無法編譯。在mod_wsgi 4.5.8中有一個修復,或者你可以使用mod_wsgi github倉庫中的代碼,直到需要的時候纔會發佈4.5.8。


更新1

管理,包括做pip install mod_wsgi時在setup.py黑客攻擊。這也將在mod_wsgi 4.5.8中。這意味着您仍然可以使用系統Apache並且不需要安裝單獨的一個,例如使用pip install mod_wsgi-httpd。這不會解決用於安裝mod_wsgi的configure/make方法的類似問題。

+0

通過brew安裝apache似乎有訣竅!感謝這樣一個強大而清晰的答案! –