apache 在 ubuntu 上指向错误的 python 版本我该如何更改?

apache 在 ubuntu 上指向错误的 python 版本我该如何更改?

我正在 Ubuntu 12.04.3 LTS EC2 实例上设置一个 flask 应用程序,一切似乎都运行良好(即我可以通过公开可用的 url 访问网页),直到我尝试导入一个模块(例如 numpy)并意识到 apache python 与我用来编译 mod_wsgi 的那个以及我正在使用的那个不同

我正在运行 apache2。

apache2 日志显示警告(特别是最后一行显示路径没有改变):

[warn] mod_wsgi: Compiled for Python/2.7.5.
[warn] mod_wsgi: Runtime using Python/2.7.3.
[warn] mod_wsgi: Python module path '/usr/lib/python2.7/:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib$

我试图在我的虚拟主机conf中设置路径(我的python与所有其他库一起位于/home/ubuntu/anaconda/bin中):

WSGIPythonHome /home/ubuntu/anaconda
WSGIPythonPath /home/ubuntu/anaconda

<VirtualHost *:80>
                ServerName xx-xx-xxx-xxx-xxx.compute-1.amazonaws.com
                ServerAdmin [email protected]
                WSGIScriptAlias / /var/www/microblog/microblog.wsgi
                <Directory /var/www/microblog/app/>
                        Order allow,deny
                        Allow from all
                </Directory>
                Alias /static /var/www/microblog/app/static
                <Directory /var/www/FlaskApp/FlaskApp/static/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

但是我仍然收到警告,并且 apache python 路径没有改变 - 我需要在哪里放置相关指令以将 apache 指向我的 python 版本和模块(例如 scipy、numpy 等)?

另外,我可以使用虚拟环境来避免这种情况吗?

提前致谢。

编辑#1:

我跑了:

>>> import sys
>>> print sys.prefix

要得到:

/home/ubuntu/anaconda

并使用 set/unset LD_LIBRARY_PATH 运行 ldd mod_wsgi.so 会产生相同的符号链接

libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f13ca1c1000)

这是python的系统版本,不是我想要的版本,也不是我运行时编译mod_wsgi的版本:

./configure --with-python=/home/ubuntu/anaconda/bin/python2.7

答案1

补丁级别修订的差异通常无关紧要,解释如下:

更重要的是,当脚本在mod_wsgi下运行时,sys.prefix的值是什么。

mod_wsgi.so 文件实际上正在使用哪个 Python 共享库,以及您是否正确编译了它以确保它将选择备用共享库。

如果它确实没有选择正确的共享库,那么不匹配可能是一个问题,您需要重新编译 mod_wsgi。

阅读文档并按照其中说明对您的安装进行检查,然后根据需要采取其中描述的操作。

相关内容