pip install mod_wsgi 在 virtualenv 中失败
pip install mod_wsgi fails in virtualenv
我正在尝试在 python 2.7.10 和 mac os 10.12 中使用 pip 在 virtualenv 中安装 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/
我是 virtualenv 的新手,所以我可能只是缺少一些关于如何设置它的东西。我试过升级 pip,通过 pip 重新安装 setuptools 和 ez_setup。
在 MacOS X Sierra 上安装 mod_wsgi 有两个问题。
第一个问题是 Apple 在能够安装第三方 Apache 模块时已将其提供的默认 Apache 安装完全不可用。这是建立在他们在之前的 MacOS X 版本中已经遇到的障碍之上的,这意味着你必须克服困难才能让它工作。
本例中的问题是 Apple 已从 Xcode 发行版中删除了 apr-1-config
和 apu-1-config
程序。这意味着当对存在的 Apache 配置进行某些类型的查询时,apxs
将失败。这是为 Apache 构建第三方模块所需的信息。如果不知道头文件的安装位置,Apache 模块的构建将失败。
鉴于 Apple 打破了在每次 OS 更新中安装额外 Apache 模块的能力的历史,并且在 OS 的生命周期内从未修复它,因此需要变通办法,不太可能再次出现他们会解决这个问题。
在其他论坛中,解决该问题的一个建议是使用 brew 安装 APR 和 APU 包,然后将 apr-1-config
和 apu-1-config
程序从这些程序符号链接到位置 apxs
在找。这对我来说看起来很容易出错,因为看起来模块可能会根据 brew 头文件进行编译,并且这些模块可能与操作系统 Apache 安装提供的库版本不匹配。这可能会导致崩溃。
因此,唯一有保障的解决方案是不使用随操作系统提供的 Apache 安装。
因此,一种选择可能是使用 brew 安装 Apache 并使用 Apache 的 brew 安装(不仅仅是来自 brew 的 APR 和 APU)。
如果使用 pip install mod_wsgi
方法,另一个选择是首先使用为 mod_wsgi
提供的 pip
可安装 Apache。
pip install -vvv mod_wsgi-httpd
只应在别无选择的情况下使用它,并且如果可以的话,您应该始终使用 Apache 系统。现在我们似乎别无选择。
这会将 Apache 安装到 Python 安装或虚拟环境中。这将需要一些时间,因为它会进入 compile/install 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
中包含一个 hack,以便在执行 pip install mod_wsgi
时使用。这也将出现在 mod_wsgi 4.5.8 中。这意味着您仍然可以使用 Apache 系统,而不需要安装一个单独的系统,例如使用 pip install mod_wsgi-httpd
。这不会解决与安装 mod_wsgi.
的 configure/make
方法类似的问题
我正在尝试在 python 2.7.10 和 mac os 10.12 中使用 pip 在 virtualenv 中安装 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/
我是 virtualenv 的新手,所以我可能只是缺少一些关于如何设置它的东西。我试过升级 pip,通过 pip 重新安装 setuptools 和 ez_setup。
在 MacOS X Sierra 上安装 mod_wsgi 有两个问题。
第一个问题是 Apple 在能够安装第三方 Apache 模块时已将其提供的默认 Apache 安装完全不可用。这是建立在他们在之前的 MacOS X 版本中已经遇到的障碍之上的,这意味着你必须克服困难才能让它工作。
本例中的问题是 Apple 已从 Xcode 发行版中删除了 apr-1-config
和 apu-1-config
程序。这意味着当对存在的 Apache 配置进行某些类型的查询时,apxs
将失败。这是为 Apache 构建第三方模块所需的信息。如果不知道头文件的安装位置,Apache 模块的构建将失败。
鉴于 Apple 打破了在每次 OS 更新中安装额外 Apache 模块的能力的历史,并且在 OS 的生命周期内从未修复它,因此需要变通办法,不太可能再次出现他们会解决这个问题。
在其他论坛中,解决该问题的一个建议是使用 brew 安装 APR 和 APU 包,然后将 apr-1-config
和 apu-1-config
程序从这些程序符号链接到位置 apxs
在找。这对我来说看起来很容易出错,因为看起来模块可能会根据 brew 头文件进行编译,并且这些模块可能与操作系统 Apache 安装提供的库版本不匹配。这可能会导致崩溃。
因此,唯一有保障的解决方案是不使用随操作系统提供的 Apache 安装。
因此,一种选择可能是使用 brew 安装 Apache 并使用 Apache 的 brew 安装(不仅仅是来自 brew 的 APR 和 APU)。
如果使用 pip install mod_wsgi
方法,另一个选择是首先使用为 mod_wsgi
提供的 pip
可安装 Apache。
pip install -vvv mod_wsgi-httpd
只应在别无选择的情况下使用它,并且如果可以的话,您应该始终使用 Apache 系统。现在我们似乎别无选择。
这会将 Apache 安装到 Python 安装或虚拟环境中。这将需要一些时间,因为它会进入 compile/install 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
中包含一个 hack,以便在执行 pip install mod_wsgi
时使用。这也将出现在 mod_wsgi 4.5.8 中。这意味着您仍然可以使用 Apache 系统,而不需要安装一个单独的系统,例如使用 pip install mod_wsgi-httpd
。这不会解决与安装 mod_wsgi.
configure/make
方法类似的问题