使用 Python 3.6、Apache 2.4 和 Django 1.11 在 Ubuntu 上安装 mod_wsgi
Posted
技术标签:
【中文标题】使用 Python 3.6、Apache 2.4 和 Django 1.11 在 Ubuntu 上安装 mod_wsgi【英文标题】:Install mod_wsgi on Ubuntu with Python 3.6, Apache 2.4, and Django 1.11 【发布时间】:2017-12-08 10:58:29 【问题描述】:如何获取为 Python 3.6.1 编译的 Apache2 的 mod_wsgi?
(或任何未来的 Python 版本)
我正在使用带有 Django 1.11 的 Python 3.6.1 虚拟环境,并且一切都根据 Apache 错误日志工作,除了 Apache 2.4 的 mod_wsgi 是为 Python/3.5.1+ 编译的并且正在使用 Python/3.5.2 所以我的 Python 3.6.1 代码失败了,因为我使用了 3.5.2 中没有的新功能
虽然 mod_wsgi 似乎没有使用我的 Python 3.6.1 虚拟环境(尽管它正在尝试使用它),但与设置我的系统有关的所有其他配置和安装似乎都很好(以守护程序模式运行)对于 Django 根据错误日志)...
我使用: sudo apt-get install libapache2-mod-wsgi-py3
为 Apache 2.4 安装 mod_wsgi
我使用: ./configure --with-python=/usr/local/bin/python3.6
和 make
和 make install
为 Python 3.6 安装 mod_wsgi
我一定是做错了什么——请纠正我!
这是我的 Apache 错误日志(稍微清理一下)- 是的,我知道它在 f"" 字符串行上失败了(python 3.6 功能不在 3.5 中)
[wsgi:warn] mod_wsgi: Compiled for Python/3.5.1+.
[wsgi:warn] mod_wsgi: Runtime using Python/3.5.2.
[wsgi:warn] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 Python/3.5.2 configured -- resuming normal operations
[wsgi:warn] AH00094: Command line: '/usr/sbin/apache2'
[wsgi:error] mod_wsgi (pid=12963): Target WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py' cannot be loaded as Python module.
[wsgi:error] mod_wsgi (pid=12963): Exception occurred processing WSGI script '/home/jamin/www/dev.tir.com/tir/tir/wsgi.py'.
[wsgi:error] Traceback (most recent call last):
[wsgi:error] File "/home/jamin/www/dev.tir.com/tir/tir/wsgi.py", line 21, in <module>
[wsgi:error] application = get_wsgi_application()
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[wsgi:error] django.setup(set_prefix=False)
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
[wsgi:error] apps.populate(settings.INSTALLED_APPS)
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/apps/registry.py", line 116, in populate
[wsgi:error] app_config.ready()
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/contrib/admin/apps.py", line 23, in ready
[wsgi:error] self.module.autodiscover()
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
[wsgi:error] autodiscover_modules('admin', register_to=site)
[wsgi:error] File "/home/jamin/www/dev.tir.com/py361ve/lib/python3.6/site-packages/django/utils/module_loading.py", line 50, in autodiscover_modules
[wsgi:error] import_module('%s.%s' % (app_config.name, module_to_search))
[wsgi:error] File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
[wsgi:error] return _bootstrap._gcd_import(name[level:], package, level)
[wsgi:error] File "<frozen importlib._bootstrap>", line 986, in _gcd_import
[wsgi:error] File "<frozen importlib._bootstrap>", line 969, in _find_and_load
[wsgi:error] File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
[wsgi:error] File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
[wsgi:error] File "<frozen importlib._bootstrap_external>", line 665, in exec_module
[wsgi:error] File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
[wsgi:error] File "/home/jamin/www/dev.tir.com/tir/company/admin.py", line 13, in <module>
[wsgi:error] from .forms import AdminInteractionForm
[wsgi:error] File "/home/jamin/www/dev.tir.com/tir/company/forms.py", line 87
[wsgi:error] resp = f"Hi user.first_name, you'll need to login to send any more suggestions. \\
[wsgi:error] \\n\\nFirst Time? Check your email/spam for login instructions from us."
[wsgi:error]
[wsgi:error] ^
[wsgi:error] SyntaxError: invalid syntax
*tir.com 也是我的实际站点的简写 - 我与该域没有任何关系
【问题讨论】:
你从哪里得到 python 3.5 .so? 【参考方案1】:当我使用@Graham Dumpleton 建议使用pip
安装mod_wsgi
时,收到此错误:
RuntimeError: The 'apxs' command appears not to be installed or is not executable.
Please check the list of prerequisites in the documentation for this package and
install any missing Apache httpd server packages.
要成功编译和安装mod_wsgi
到pip
,我需要在Ubuntu 上安装apache2-dev
包:
sudo apt-get install -y apache2-dev
在 CentOS/Red Hat 上:
sudo yum install httpd-devel
之后pip install mod_wsgi
成功完成。
希望这可能对其他人有所帮助。
【讨论】:
在 CentOSyum install httpd-devel
【参考方案2】:
执行以下操作。
卸载你的系统 mod_wsgi 包。
sudo apt-get remove libapache2-mod-wsgi-py3
使用pip
安装 mod_wsgi,最好安装到 Python 虚拟环境中。确保 pip
是您要使用的 Python 版本。
pip install mod_wsgi
通过运行显示要添加到 Apache 配置文件以加载此 mod_wsgi 的配置:
mod_wsgi-express module-config
将上述命令的输出显示配置并添加到 Apache 配置中。
向 Apache 添加配置以加载一个 hello world WSGI 应用程序以测试它的工作原理。
查看基于pip
的安装详情:
【讨论】:
我卸载了 libapache2-mod-wsgi-py3 然后从我的虚拟环境pip install mod_wsgi
给了我这个错误(如果你需要,还有更多)/usr/bin/ld: /usr/local/lib/libpython3.6m.a(abstract.o): relocation R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libpython3.6m.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status error: command 'gcc' failed with exit status 1
我将尝试使用 --enable-shared
重新编译 Python 3.6.1 并会报告。
有关如何构建 Python 的一般指南,请参阅 blog.dscpl.com.au/2015/06/… 它谈到了 Docker,但在直接安装到主机时仍然相关。
@palewire 创建一个新问题。但是,如果您环顾四周,并阅读有关 PyPi 的文档,您会发现这是因为您还没有安装 Apache 的开发包。请参阅pypi.org/project/mod_wsgi 没有那个apxs
将找不到。这条消息甚至说了这么多。
如果您收到missing Apache httpd server packages
错误,您可能需要运行sudo apt-get install apache2-dev
以上是关于使用 Python 3.6、Apache 2.4 和 Django 1.11 在 Ubuntu 上安装 mod_wsgi的主要内容,如果未能解决你的问题,请参考以下文章
Windows 上的 Apache 2.4、Python 和 Django
将 mod_wsgi 从 python3.5 更改为 3.6
如何在 Windows 上为 apache 2.4 和 python 3.4 安装 mod_wsgi?