python-3.x - python venv的激活(activate_this.py)不会工作或抛出错误
问题描述
Soo,我创建了一个小型 Flask 网站,我想用 Apache 2.4 将它部署在我的 Debian 10 服务器上
起初,我按照教程创建了 apache2 conf 文件和 .wsgi 文件。由于效果不佳,我收到错误“ModuleNotFoundError:没有名为'flask'的模块”,所以我设置了一个虚拟环境
python3 -m venv venv
并将我的 .wsgi 更改为
#!/usr/bin/python3
import sys
import logging
activate_this = '/home/bot/Club-Manager/Webinterface/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/home/bot/Club-Manager/Webinterface/")
import app as application
现在我明白了
Failed to exec Python script file '/var/www/html/Webinterface/Webinterface.wsgi'
Exception occurred processing WSGI script '/var/www/html/Webinterface/Webinterface.wsgi'., file "/var/www/html/Webinterface/Webinterface.wsgi", line 8, in <module>,
exec(file_.read(), dict(__file__=activate_this))
File "<string>", line 28, in <module>
AttributeError: 'str' object has no attribute 'decode'
起初“activate_this.py”对我来说并不存在,一些研究告诉我只需从我尝试过的 lib/virtualenv 文件夹中复制它(venv 中的一个和 ~/.local/ 中的一个)。经过更多研究后,我发现您应该使用与运行它相同的 python 版本创建 venv (Duh),我检查并使用 python3 而不是仅 python 创建了 venv,因为安装了 python3 和 python2 (甚至如果“python”让我进入 python 3.7,但 /usr/bin/python 是 python 2)。我还尝试了 venv/lib/virtualenv 中的“activator.py”文件,但这也没有用(它确实有效,但也抛出了未找到烧瓶的错误)
我检查并重新安装了 venv 中的依赖项,我检查了它们是否是为 python3 安装的,它们是。
所以现在我很迷茫,我想问题出在“activate_this.py”文件上,但我不知道如何获得功能性文件,或者还有什么可能导致它崩溃。将我的请求从域转发到 python 脚本的“Apache2 部分”似乎有效(我猜是因为我为什么会看到错误)所以我没有附加 apache conf,但如果需要我可以发布它. 我还检查了文件夹的权限,/var/www/html/Webinterface 是 /home/bot/Club-Manager/Webinterface 的符号链接,所有这些都得到了 bot:www-data 这是 apache2 应该使用的用户和组
感谢您提前提供任何提示
解决方案
我知道这已经一岁了,但万一有人遇到同样的问题......
我发现的最简单/最快/最干净的方法是简单地从 wsgi 文件的 venv 中引用 python 解释器,如下所示:
#!/path/to/your/venv/bin/python
从那里,您的 wsgi 应用程序将使用相应的 python,无需激活、搜索包等。
推荐阅读
- python - 创建重复字符数量增加的列表
- python - 使用属性设置器时出现错误“'str' object is not callable”
- android - 使用 RxJava 窗口或缓冲区在 Android 中进行批处理?
- linux-kernel - 你好。我正在尝试使用 kmalloc 在 linux 内核中分配内存
- css - 尝试更改单个列表项的图标
- php - PHP:为什么标志 SORT_LOCALE_STRING 没有按预期工作?
- android - 查询数据 Firebase Firestore
- java - CMake 找不到 JNI
- r - dplyr 排列不起作用
- javascript - 使用 Babel 编译 Gulp 得到 Object.create 错误