You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Conda环境+Gunicorn+Nginx部署Flask时提示ffmpeg: not found如何解决

问题核心说明

你遇到的报错和Nginx配置无关,Nginx仅负责请求反向转发,不影响Gunicorn进程的运行环境,问题根源在Gunicorn进程的运行权限、环境变量配置上,可按以下步骤排查解决:


步骤1:排查Gunicorn运行用户的权限问题

你用到的Anaconda虚拟环境下的ffmpeg路径为/root/anaconda3/envs/myenv/bin/ffmpeg,属于/root目录,默认仅root用户有权限访问。如果你部署时是用普通用户(比如www-data、自定义的应用用户)运行Gunicorn服务,根本没有权限读取该路径下的文件,就会报找不到ffmpeg的错误。

  • 排查方法:查看Gunicorn的服务管理配置(如果是systemd部署的则查看对应的.service文件),确认User和Group字段配置的运行用户,用该用户执行以下命令,看是否能正常输出:
    ls /root/anaconda3/envs/myenv/bin/ffmpeg
    
    如果返回权限不足,就是该问题导致。
  • 解决方法:
    1. (推荐)把ffmpeg文件复制到所有用户都可访问的公共路径下,授予执行权限:
      cp /root/anaconda3/envs/myenv/bin/ffmpeg /usr/local/bin/
      chmod 755 /usr/local/bin/ffmpeg
      
    2. 不推荐放开/root目录的访问权限,存在安全风险。

步骤2:排查Gunicorn进程的PATH环境变量

如果是用root用户运行Gunicorn还是报错,大概率是systemd启动服务时没有加载用户的环境变量配置,进程的PATH和你本地登录shell的PATH不一致,系统无法找到ffmpeg的位置。

  • 排查方法:在Flask代码中加入临时日志,打印当前进程的环境变量:
    import os
    # 把日志输出到你能看到的位置,比如应用日志文件
    print("当前进程PATH:", os.environ.get('PATH'))
    
    确认输出的PATH中是否包含ffmpeg所在的目录,一般部署场景下默认是没有包含Anaconda虚拟环境路径的。
  • 解决方法:
    1. (推荐)代码中调用ffmpeg时固定写公共路径的全路径,比如上面复制到/usr/local/bin之后就写:
      subprocess.call('/usr/local/bin/ffmpeg ...')
      
    2. 如果要保留虚拟环境内的ffmpeg,可在Gunicorn的启动配置中添加PATH环境变量,比如systemd的.service文件中[Service]段添加以下配置:
      Environment="PATH=/root/anaconda3/envs/myenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
      
      修改后执行systemctl daemon-reload重载配置,再重启Gunicorn服务即可。

步骤3:验证路径有效性

修改完成后可在代码中添加测试逻辑,确认路径可访问:

import os
ffmpeg_path = '/usr/local/bin/ffmpeg'
# 检查文件是否存在
print(os.path.exists(ffmpeg_path))
# 检查是否有执行权限
print(os.access(ffmpeg_path, os.X_OK))

两个返回值都为True则配置正常。

内容的提问来源于stack exchange,提问作者Mirwise Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:45:03