将 mod_wsgi 从 python3.5 更改为 3.6

Posted

技术标签:

【中文标题】将 mod_wsgi 从 python3.5 更改为 3.6【英文标题】:Change mod_wsgi from python3.5 to 3.6 【发布时间】:2018-08-12 07:19:49 【问题描述】:

我有一个以前在 apache2 上使用 python3.5 运行的烧瓶应用程序。 我现在正在尝试将其更改为在 3.6 上运行(我的代码中有类型提示,仅在 3.6 上受支持)。 我已经为 python3.6 安装了模块,但是当尝试重新启动 apache 并运行我的应用程序时,它失败了。 运行时

mod_wsgi-express module-location

我有python3.5版本

/usr/local/lib/python3.5/dist-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so

我的服务器上的 python3.6 目录中也存在相同的文件。 我还更改了我的 $PATH 以运行 python3.6 作为 python 的默认值。 我怎样才能告诉 apache 在 python3.6 而不是 3.5 上运行?

【问题讨论】:

定义“失败”。如果没有错误消息的详细信息或失败的指示,就无法猜测。另外,如果安装了系统 mod_wsgi,您是否从 Apache 卸载了系统 mod_wsgi?您是否运行了mod_wsgi-express module-config 来获取配置,您应该将其添加到Apache 配置中以使其加载使用pip 构建的版本?阅读pypi.python.org/pypi/mod_wsgi了解更多详情。 感谢您的回复。它失败了,这意味着浏览该站点返回“内部服务器错误”并且 apache 日志文件显示“为 Python/2.7.11 编译”。和“使用 Python/2.7.12 的运行时。”。什么是“系统 mod_wsgi”,如何卸载特定系统 mod_wsgi?我确实运行了 mod_wsgi-express module-config,但是当尝试将它添加到“/etc/apache2/apache2.conf”文件并重新启动 apache 时,在 apache 日志中它看起来仍然在运行 python27 如果您在错误日志中没有收到任何错误,则您的 Python Web 框架很可能生成了错误并且没有记录它。你用的是什么网络框架?关于Python版本,在将pip install版本集成到Apache配置之前是否卸载了系统mod_wsgi包。 我做到了 (sudo apt-get remove libapache2-mod-wsgi)。然后通过 pip 安装模块。在我这样做之后,apache中的错误描述了flask正在运行python3.5,并且错误是语法错误(我使用了仅在python3.6+中允许的类型提示)。所以问题是我有两个 python3 版本,但我想在 python3.6 上运行。有没有可以告诉 mod_wsgi 执行哪个 python3 版本的配置文件? 我还将符号链接python3 更改为指向 3.6 【参考方案1】:

哇!它正在工作! 我卸载了 mod_wsgi (sudo apt get remove libapache2-mod-wsgi)。 然后,通过 pip 专门将模块安装到 python3.6 (python3.6 -m pip install mod_wsgi),但此时 apache 仍然运行 python3.5。我添加到 apache 配置文件中(在 ubunutu 16.4 中,该文件位于: /etc/apache2/apache2.conf/usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so 用于 RHEL/CentOS 7) 以下:LoadModule wsgi_module "/usr/local/lib/python3.6/dist-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so" andWSGIPythonHome "/usr" 就成功了。 我为这个问题流下了很多眼泪,找到了apache2.conf文件等,所以希望这对任何人都有帮助。

【讨论】:

你能检查这个链接吗:***.com/questions/55353284/…。我被这种情况困住了 我应该在哪里以及如何放置'/usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so'对于 ubuntu? 我建议使用 /etc/apache2/mods-available/wsgi.load 文件而不是更改 apache2.conf。在那里您可以将模块的路径更改为您需要的路径,然后运行a2enmod wsgi 命令。【参考方案2】:

LoadModule 解决方案对我有用。但是,我发现最容易首先确保 a2dismod wsgi 由默认的 apache2 模块提供。我花了 3 天时间查看各种解决方案和答案,并查看 Graham 的 WSGI 指南。

【讨论】:

【参考方案3】:

在我的情况下,我所做的是从 Django env 中删除 python 3.6 并重新安装 python 3.5 并且它起作用了。

【讨论】:

以上是关于将 mod_wsgi 从 python3.5 更改为 3.6的主要内容,如果未能解决你的问题,请参考以下文章

Windows下部署Django(Apache+mod_wsgi)

mod_wsgi 无法连接 WSGI 守护进程

Django + apache & mod_wsgi:更改后必须重新启动 apache

烧瓶 mod_wsgi 地址已在使用中 [重复]

Apache SetEnv 无法与 mod_wsgi 一起按预期工作

Windows10下Apache2.4配置Django