2016-11-12 290 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似乎有诀窍!感谢这样一个强大而清晰的答案! –