pip install mod_wsgi在virtualenv中失败

A_S*_*ich 5 django mod-wsgi virtualenv django-wsgi python-2.7

我想在virtualenv中的mac os 10.12上使用python 2.7.10中的pip安装mod_wsgi.我打算在Django 1.10.3中使用它.当我运行"pip install mod_wsgi"时,我得到以下输出:

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/
Run Code Online (Sandbox Code Playgroud)

我是virtualenv的新手,所以我可能只是错过了如何设置它的东西.我尝试通过pip升级pip,重新安装setuptools和ez_setup.

Gra*_*ton 9

在MacOS X Sierra上安装mod_wsgi有两个问题.

第一个问题是Apple在安装第三方Apache模块时已经完成了默认的Apache安装.这是建立在他们之前的MacOS X版本已经遇到的障碍之上的,这意味着你必须跳过篮球才能让它运转起来.

在这种情况下的问题是Apple已经从Xcode发行版中删除了apr-1-configapu-1-config程序.这意味着apxs在对存在的Apache配置进行某些类型的查询时将失败.这是为Apache构建第三方模块所需的信息.在不知道安装头文件的位置的情况下,Apache模块的构建将失败.

鉴于Apple的历史打破了在每次操作系统更新中安装额外Apache模块的能力,并且从未在操作系统的生命周期内修复它,因此需要解决方法,因此他们不太可能再次解决此问题.

在其他论坛中,一个解决问题的建议是使用brew安装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
Run Code Online (Sandbox Code Playgroud)

只有在没有选择的地方才能使用它,如果可以的话,你应该总是使用系统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

setup.py在进行操作时管理包括黑客入侵pip install mod_wsgi.这也将在mod_wsgi 4.5.8中.这意味着您仍然可以使用Apache系统,而不需要安装单独的系统,例如使用pip install mod_wsgi-httpd.这不会解决configure/make安装mod_wsgi的方法的类似问题.