2013-07-03 60 views
0

安装mod_wsgi的modwisgi-3.4中make我收到以下错误: mod_wsgi.c:142:20: error: Python.h: No such file or directory 官方排查页http://code.google.com/p/modwsgi/wiki/InstallationIssues建议将“对应于你有Python运行包的Python安装开发包安装”。无法尝试安装从源代码

现在如何从源代码安装上述开发包?我使用httpd-2.2.24和modwisgi 3.4在Linux上运行python2.7.4。

+0

你需要你的发行版python开发包。它是Redhat(Fedora/CentOS)还是基于Debian的(Ubuntu/Mint)机器? – tMC

+0

这是基于Redhat .. –

+1

'yum install python-devel' – tMC

回答

1

运行以下命令:

$ python-config --cflags 

这会给你一个标志的列表传递给编译器找到Python.h:

$ python-config --cflags 
-I/usr/include/python3.3m -I/usr/include/python3.3m -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED= 
1 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=x86-64 -mtune=generic -O2 -pipe -fstack-pr 
otector --param=ssp-buffer-size=4 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ss 
p-buffer-size=4 

你可能也想运行python-config --ldflags为必要的链接器标志。

如果您已经安装了Python的多个版本,您可以指定,即python2.7-config

然后,我将手动编辑该文件posix-ap2X.mk.in,使其包含以下内容:

CFLAGS = @[email protected] $(shell python-config --cflags) 
LDFLAGS = @[email protected] $(shell python-config --ldflags) 

configure.ac的Autoconf文件试图找出这些东西,但它似乎以一种笨重的方式来做,显然不适合你,所以这种手动方式有望解决问题。

编辑:哦,另外,请确保您使用正确的,并且您指定了必要时使用哪个Python解释器。例如,如果您已经将Python从源代码安装到了某个非标准位置,而在通常位置安装了另一个版本,请务必指定该代码(即在上述编辑中使用/path/to/my/python-config并将参数PYTHON=/path/to/my/python传递给configure脚本) 。实际上,只需指定正确的Python解释器就可能导致包含的configure脚本正确执行其工作。

+0

mod_wsgi配置脚本完全适用于你,你自己不需要这样做。 –

+0

是的,我注意到最终我读了'configure.ac'多了一些,因此进行了最后的编辑。顺便说一句,据我了解,通过PYTHON变量指定Python解释器位置是标准的,而不是通过'--with-python'标志。另外,我建议检查GNU pyconfigure以获取一些方便的Python Autoconf宏(免责声明:我是pyconfigure维护者;请随时直接与我联系以继续讨论,以免混淆问题)。 – 2013-07-04 07:14:44

+0

Apache配置脚本使用--with来指示要用于Apache的包的位置。该脚本遵循该惯例。这就是为什么这样做的历史。 –

0

您必须使用--with-python选项来配置mod_wsgi,告诉它从源代码安装的'python'二进制文件的路径。它看起来像你还没有这样做,它仍然使用没有安装相应的开发包的系统Python。当您运行它并告诉我们您自己安装的Python实际所在的位置时,请提供实际的“configure”脚本命令行的详细信息。还要确保你运行'make distclean'来清除任何旧版本的结果,以防令人困惑的事情发生。

+0

嗨格雷厄姆, 我给下面的命令配置: '的./configure --prefix = custom_modwsgi_location --with-APXS = apxs_path_of_custom_apache --with-蟒蛇= custom_python_path --libdir = lib_path_prefix_used_for_apache' –

+0

供应的实际路径你用于--with-python。我想确保你指出了正确的事情。如果你不这样做,它会回退到系统Python。 –

+0

我使用的配置命令: ** apache **: './configure --with-included-apr --prefix = $ MY_APPS/httpd27 --libdir = $ MY_APPS/lib27 --enable-ssl --enable -mods-shared = all --with-mpm = worker' ** modwsgi **: './configure --prefix = $ MY_APPS/modwsgi27 --with-apxs = $ MY_APPS/httpd27/bin/apxs - -with-python = $ MY_APPS/python2.7/bin/python --libdir = $ MY_APPS/lib27' –