Ubuntu 20.04下Apache部署Deepface Flask应用报PermissionError13错误如何解决?
问题原因
Apache2运行Flask WSGI进程的默认用户为www-data,该用户的home目录默认指向/var/www,但www-data默认对/var/www目录没有写入权限,因此Deepface初始化时尝试创建/var/www/.deepface目录时触发权限拒绝错误。
解决方案
方案1:手动创建目录并分配权限(推荐,无需修改业务代码)
直接手动创建Deepface需要的目录,给www-data用户授予对应读写权限即可,在终端执行以下命令:
# 创建目标隐藏目录 sudo mkdir /var/www/.deepface # 将目录所有者设置为Apache运行用户www-data sudo chown www-data:www-data /var/www/.deepface # 赋予目录读写执行权限,支持后续写入模型文件、创建子目录 sudo chmod 755 /var/www/.deepface
执行完成后重启Apache2服务生效:
sudo systemctl restart apache2
方案2:代码中修改Deepface默认存储路径
如果不想修改服务器目录权限,可在Flask代码初始化Deepface之前,通过修改环境变量自定义Deepface的主目录,选择一个www-data有写入权限的路径即可,修改后的flaskapp.py示例如下:
import os # *注意:该环境变量必须在导入Deepface库之前设置,否则不会生效 # 替换为你的Flask项目根目录路径,提前确保该路径对www-data开放读写权限 os.environ['DEEPFACE_HOME'] = '/path/to/your/flask/project' from flask import Flask,request from deepface import DeepFace app = Flask(__name__) @app.route("/") def helloworld(): return "helloworld" @app.route("/verify",methods=['POST']) def hello(): base1 = request.form.get('base1') base2 = request.form.get('base2') return DeepFace.verify(base1, base2,model_name='Facenet') if __name__ == "__main__": app.run()
内容的提问来源于stack exchange,提问作者Younus Mustafa
相关产品推荐
相关产品推荐

