当前位置: 首页 > article >正文

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中,你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效,如图:
在这里插入图片描述

你可以使用以下代码:

import os
import winreg as reg

# ffmpeg.exe的路径
ffmpeg_path = r"D:\ffmpeg-2023-s\bin"

# 获取当前的环境变量PATH
current_path = os.environ.get('PATH', '')

# 如果ffmpeg的路径不在当前PATH中,就添加进去
if ffmpeg_path not in current_path:
    new_path = current_path + ";" + ffmpeg_path
    os.environ['PATH'] = new_path
    
    # 将新的路径添加到系统环境变量中(为了永久生效)
    try:
        key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", 0, reg.KEY_WRITE)
        reg.SetValueEx(key, "Path", 0, reg.REG_EXPAND_SZ, new_path)
        reg.CloseKey(key)
        print("ffmpeg路径已成功添加到系统环境变量Path中。")
    except Exception as e:
        print(f"修改系统环境变量时出错: {e}")
else:
    print("ffmpeg路径已在环境变量中,无需修改。")

以上代码通过 Python 实现了将 ffmpeg 的安装路径添加到 Windows 系统的 PATH 环境变量中,并确保修改永久生效。

修改当前进程的环境变量:首先获取当前的 PATH 环境变量,判断 ffmpeg 路径是否已存在。如果不存在,则将其添加到 PATH 环境变量中,并通过 os.environ 更新当前进程的环境变量。

通过注册表修改系统环境变量:为了使修改永久生效,代码通过 winreg 模块操作 Windows 注册表,修改系统级的 PATH 环境变量。这样,ffmpeg 路径会对所有用户和进程生效。

临时与永久修改:使用 os.environ 修改仅对当前 Python 进程有效,而通过 winreg 修改则会永久生效,确保即使重启系统,ffmpeg 路径依旧保持在 PATH 环境变量中。

注意

os.environ:用来获取和设置当前Python进程的环境变量。
winreg:通过这个模块可以修改Windows注册表,从而永久修改系统的环境变量。
HKEY_LOCAL_MACHINE:这是Windows注册表中存储系统级别设置的位置,路径修改会影响到所有用户。
reg.SetValueEx:用来将新的路径添加到 Path 环境变量。

运行此脚本时需要管理员权限,因为修改系统环境变量涉及到注册表操作。
如果只想临时修改环境变量,可以直接通过 os.environ 来修改,改动只在当前进程中有效。
运行此脚本后,你应该能够在命令行中直接使用 ffmpeg 命令了。如果希望立即生效,可以重新启动你的命令提示符或者相关的终端窗口。

运行结果:

在这里插入图片描述
系统环境:
在这里插入图片描述


http://www.kler.cn/a/526614.html

相关文章:

  • 项目集成GateWay
  • RK3568中使用QT opencv(显示基础图像)
  • 蓝桥备赛指南(5)
  • Linux二进制部署K8s集群的平滑升级教程
  • 【C语言】在Windows上为可执行文件.exe添加自定义图标
  • 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • nodeJS 系统学习-章节3-文件系统
  • vue3的路由配置
  • AI常见的算法和例子
  • IP服务模型
  • LeetCode - #194 Swift 实现文件内容转置
  • Java基础知识总结(三十二)--API--- java.lang.Runtime
  • 【算法设计与分析】实验2:递归与分治—Hanoi塔、棋盘覆盖、最大子段和
  • 机器学习(三)
  • kaggle视频追踪NFL Health Safety - Helmet Assignment
  • 【C++】stack与queue的模拟实现(适配器)
  • Deepseek本地部署(ollama+open-webui)
  • Spring Boot深度开发实践:从高效开发到生产级部署
  • openRv1126 AI算法部署实战之——YOLO实时目标识别实战
  • 国产碳化硅(SiC)MOSFET模块与同功率应用的进口IGBT模块价格持平
  • 模型I/O
  • Vue3笔记——(二)
  • 本地Apache Hive的Linux服务器集群复制数据到SQL Server数据库的分步流程
  • 36【Unicode(UTF-16)】
  • 如何解除TikTok地区限制:实用方法解析
  • 【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂