modpythonrpm
1. windows安装mod_python未生成mod_python.so
在windows上需要.so是非常奇怪的……因为那是linux下动态链接库的拓展名。windows下是dll。
题主最好转到linux下去做这些。
2. 怎样得到在windows环境下与python2.7匹配可用的mod_python.so
http://archive.apache.org/dist/httpd/modpython/
去找,只有python2.5是编译好的,其它的需要编译,不过其实可以把文件中的python25.dll改为你想要的python27.dll,因为这几个版本基本上是兼容的。
3. rpm的包依赖问题
您老可以在 rpm 命令行中加上 --force --nodeps 等强制参数, 不让 rpm 检查 dependencies 等, 但是这样做的后果您老得自己承担 ...
4. 我已经安装python3.3.4+apache2.2,现在如何选择mod_python的版本
Python的版本太高了,mod_python并不支持Python 3000以上的版本,http://modpython.org/ 建议可以选择其它web服务器,比如Nginx、Lighttpd之类的,现在国产的Kangle扩展性也很强。如果是采用框架,比如Django,在调试的时候可以直接使用Django内置的Python Web服务器
5. linux配置apache和python的环境,mod_python在安装的报错处理,在线等!!
编译过程钟可能出现以上错误
解决方案:
修改src/connobject.c第142行
把!(b == APR_BRIGADE_SENTINEL(b) || 改为!(b == APR_BRIGADE_SENTINEL(bb) ||
你碰到的应该是这个情况吧?
/usr/local/lib/python2.5/config/libpython2.5.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
apxs:Error: Command failed with rc=65536
解决方案:
一定要确认编译Python的时候有没有加上--enable-shared,如果没有,加上重新编译
此时行Python可能出现以错误
python: error while loading shared libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file or
解决办法:
新建下面文件
vim /etc/ld.so.conf.d/python2.7.conf
加入内容:
/usr/local/lib
保存退出后运行:
ldconfig
试下,有问题在找我。
6. apache+mod_python访问py出错
好久不用mod_python了。现在都用WSGI或者是UWSGI,这个更容易使用。
看你的提示,应该还没有安装好。似乎mod_python没有装上。缺少一个mod_python.apache模块。
我印象中这个mod_python是要编译的。也许需要apr模块。 所以mod_python这个包加载后,会自已创建python解释器。解释器就是import mod_python apache,如果成功了就有一个callback。
但是,显示解释器退出了。因为你没有mod_python.apache模块。 你再查查看。
7. python中,mod_python到底做了些什么呢
mod_python的确是一个让python程序员能够apache2写一些网站的工具。它是一个接口。过去一些python写的整站系统需要通过mod_python作为连接枢纽,将apache2与它们连接成web+app这样的结构。
不过mod_python也可以自己直接的独立写网站。学一学没有坏处。
不过现在,大多数情况下,mod_python已经被其它的方法代替了。比如django现在用wsgi或者是fastcgi连接。
mod_python的特点是效率高。可以管理自己对应的python进程,同时还有通信机制。
如果不是因为它有点点难用,我也会经常用。
好象是因为它配置起来,有时候没有生效。我有些弄不明白。
你既然问到了mod_python,说明你python已入门了。正在向高手迈进。加油啦。
8. 怎样将python程序及其依赖打包成rpm包部署
可以的,虽然说pip比较流行,但rpm从原理上完全可以覆盖这些部署过程,只有一些小的要求:
所有环境的Python安装方式必须一致,不能存在某些Python是2.6,某些是2.7,某些装在/usr/local下面,某些在/usr/lib下面之类的情况
如果带有C扩展的话,链接到的库应当是来自某个rpm包的。如果没有的话就简单多了。
如果有依赖的其他Python包的话,需要把依赖的包也做成rpm;实在偷懒也可以打进同一个rpm中。
实际上发行版中有许多Python库都以rpm的形式提供,不过一般我们嫌它版本旧,更倾向于用pip管理一组新的。
要写一个rpm spec,可以从头自己写,也可以参考一些其他软件的spec,我建议你采用后者,既然你们公司已经广泛使用rpm了,那肯定有很多本公司的spec可以参考,也有人可以问。
回到话题,写rpm spec,或者说rpmbuild的过程,分成以下步骤:
部署源代码,一般来说将一个.tar.gz复制到SRC目录中,然后用%setup宏就可以了,这个宏也基本上没干什么特别的事,就是把.tar.gz解压缩了一下,然后进入相应目录。.tar.gz只要从git中取出干净的源代码,整个目录打成tar包就可以了。好像还有专门的git-archive命令。
build过程,对应C/C++项目中的./configure, make。对Python项目来说一般可以跳过,因为setup.py都会搞定。也可以选择在这个阶段使用setup.py进行build,build出一个wheel包来,这是我推荐的方法,因为wheel包和直接setup.py install的目录结构有一些差异,而pip安装默认是按照wheel的方式。也就是说在这一步调用:setup.py bdist_wheel。再精细一点可以指定build的目标为build目录,这样需要cleanup的时候容易一些。
install过程,对应C/C++项目中的make install。一般来说我们平时怎么装这个软件,这一步就怎么装,所以我们也是使用setup.py。唯一的技巧在于,我们需要指定安装的目标到rpmbuild根的某个目录下面,而不是系统的目录。这个目录在install开始之前应当被清空。可以参考其他spec。对于我们来说,就是将Python的库安装到指定的目录,而不是系统的site-packges当中。如果你在build这一步已经打包了wheel,那么使用wheel install命令、指定目标文件夹就可以了。
打包过程,rpm的打包原理非常简单,最开始install的目录是空的,install完成后里面有了一堆文件,那么就按照文件列表将这一堆文件打包、然后指定每个文件将来应当安装到什么位置。对于Python项目来说,一般会安装package名的目录和EGGINFO两个目录,将这两个目录连同里面所有的内容一起加入%files段就可以了。如果你要部署的是某个应用,一般你还会希望将init.d中的启动脚本、或者 systemd的配置文件以及其他应用的配置文件一起部署了,可以在install的过程中将这些文件从源文件目录中复制到目标文件夹里,然后加到files段里面。
安装、卸载脚本。表现为%pre, %post之类的段一般来说如果你有服务要安装的话,需要在这里使用chkconfig, chkconfig on,或者systemd的话就是systemctl enable。如果你希望安装完有个机会修改配置文件,可以选择在首次安装的时候不要启动服务,而在update的时候启动服务,这可以通过脚本传进的第一个命令行参数$1进行判断,0、1、2表示不同的情况(分别是卸载、安装、更新,具体的记不清了),可以参考其他人写的spec;也可以选择安装完永远直接启动,在post中使用service xxx start, 在preuninstall的时候使用service xxx stop。
rpm的功能还是很强大的,除了跟pip共通的功能以外,它有一个显着的好处就是可以帮助你同时管理服务的配置、启动和停止,从而简化部署过程。不过要注意如果使用rpm的话就不要同时使用pip,否则pip更新过的库,rpm卸载或更新时会冲突。
有第三方依赖的时候,一种方法是为每个依赖项写一个独立的spec,里面内容都是上面这样的直接调用setup.py,或者更简单一些,在install的时候直接调用pip就可以;然后在需要这些依赖项的rpm包的spec当中写上Require信息,跟pip体系的requirements差不多。偷懒也可以在同一个rpm中打了一堆Python包进去,但是如果有多个独立安装的rpm都打了同一个Python包,就会冲突,要注意。
其实用习惯了会觉得也不比pip差,需要跟非Python组件混合部署的时候反而会觉得简单了很多。
9. Mod_Python的历史
Mod_python起源于一个被称为Httpdapy(1997)的项目。很长时间以来, Httpdapy并没有被称作mod_python,因为Httpdapy不是专门用于Apache的。 Httpdapy被设计成跨平台的,实际上最初是为Netscape server写的(那个时候被称为Nsapy)(1997)
这个Httpdapy的README文件的摘要,很好的阐述了在HTTP server中嵌入Python所带来的挑战和解决方案。
10. Mod_Python的介绍
mod_python是apache组织的一个项目,通过它,可以开发psp或cgi,mod_python功能强大,速度快,是非常优秀的web开发工具。