我正在build立一个烧瓶应用程序和Ubuntu 12.04.3 LTS EC2实例,一切似乎都工作正常(即我可以通过公开可用的url到达网页),直到我试图导入一个模块(如numpy),并实现Apache的Python不同于我用来编译mod_wsgi和我正在使用的那个
我正在运行apache2。
apache2日志显示警告(特别是最后一行显示path没有改变):
[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中设置path(我的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的Pythonpath没有改变 – 我需要把相关的指令指向我的Python版本和模块(例如scipy,numpy等)的Apache?
另外,我可以避免使用虚拟环境吗?
提前致谢。
编辑#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
修补程序级别修订的差异通常不重要,并在以下内容中进行了解释:
更重要的是当在mod_wsgi下运行脚本时,sys.prefix的值是多less。
以及mod_wsgi.so文件实际使用的是什么Python共享库,以及是否正确编译它以确保它将select备用共享库。
如果它确实没有select正确的共享库,那么不匹配可能是一个问题,你需要重新编译mod_wsgi。
仔细阅读文档并对您的安装进行检查,并根据需要采取相应的措施。