简介
我在python 3中编写了一个Web API,它使用flask。当我从终端运行web API时,代码运行良好,并且它是从代码中的下一行托管的。
if __name__ == '__main__':
app.run(host='', port=8010, debug='true')
现状
代码运行得很好,我想在Apache服务器上进行设置。然而,Apache服务器已经有使用python 2构建的网站,并且需要针对python 2的mod_wsgi。
我查了一下是否有办法在apache服务器上设置两个mod-wsgi,但根据以下来源,你不能mod_wsgi用于一台Apache服务器上的Python 2和Python 3
尝试解决方案
我正在尝试将mod wsgi安装到一个虚拟环境中。我从这里下载了这个包,并在激活后尝试将其安装到环境中。
我从终端运行了sudo python setup.py install
,但我在下面得到了错误
文件"setup.py",第139行,位于'缺少Apache httpd服务器包。'%APXS(RuntimeError:"apxs"命令似乎未安装或不可执行。请检查此软件包文档中的先决条件列表,并安装任何丢失的Apache httpd服务器软件包。
所以我打开了压缩包中的Read-Me文件,发现了以下
如果您希望使用安装在标准位置,可以设置和导出
APXS
环境变量设置为Apache的Apacheapxs
脚本的位置在执行安装之前进行安装。请注意,此时不会将任何内容复制到Apache安装中指向因此,您不需要以root用户身份运行除非将其安装到站点范围的Python安装中,而不是Python虚拟环境。
若要验证安装是否成功,请运行带有
start-server
命令的mod_wsgi-express
脚本::mod_wsgi-express start-server
它似乎解决了我的问题,因为Apache没有安装在我运行命令的虚拟环境中,但我不知道如何做到
我想他们谈论的是setup.py文件,我应该更改路径,但我不知道如何从语法角度进行更改,也不知道我的APXS脚本位于哪里。
以下是我认为需要修改的代码片段
APXS = os.environ.get('APXS')
WITH_HTTPD_PACKAGE = False
if APXS is None:
APXS = find_program(['mod_wsgi-apxs'],
paths=[os.path.dirname(sys.executable)])
if APXS is not None:
WITH_HTTPD_PACKAGE = True
if APXS is None:
APXS = find_program(['mod_wsgi-apxs', 'apxs2', 'apxs'],
'apxs', ['/usr/sbin', os.getcwd()])
elif not os.path.isabs(APXS):
APXS = find_program([APXS], APXS, ['/usr/sbin', os.getcwd()])
if not WITH_TARBALL_PACKAGE:
if not os.path.isabs(APXS) or not os.access(APXS, os.X_OK):
raise RuntimeError('The %r command appears not to be installed or '
'is not executable. Please check the list of prerequisites '
'in the documentation for this package and install any '
'missing Apache httpd server packages.' % APXS)
问题
如果有帮助的话,我会在运行Ubuntu 12.04LTS的服务器上完成所有这些。我最后的问题是以下
- APXS通常在Ubuntu中位于哪里
- 如何更改代码片段以使用APXS脚本
非常感谢您抽出时间
很抱歉给带来不便
原来我忘了在我的apache服务器上安装APXS。我只是从终端运行了代码,它就工作了sudo apt-get apache2-threaded-dev
更新
对于Ubuntu 18它的(谢谢@MagicLAMP(
sudo apt-get install apache2-dev
对于Centos 7:(谢谢@用户(
yum install httpd-devel
对于Centos 7:
yum install httpd-devel