Python: 如何使用 os.environ[“PATH”] 設定環境變數?與 sys.path.append() 差別為何?

加入好友
加入社群
Python: 如何使用 os.environ["PATH"] 設定環境變數?與 sys.path.append() 差別為何? - 儲蓄保險王

ffmpeg.exe , ffprobe.exe 所在路徑:
D:\user\Python\speech\ffmpeg-7.0.2-essentials_build\bin

Python: 如何使用 os.environ["PATH"] 設定環境變數?與 sys.path.append() 差別為何? - 儲蓄保險王

code:

import os
from pydub import AudioSegment

# 添加 ffmpeg  ffprobe 的路径到系统环境变量 PATH 
ffmpeg_bin_path = r"D:\user\Python\speech\ffmpeg-7.0.2-essentials_build\bin"
os.environ["PATH"] += os.pathsep + ffmpeg_bin_path

# 现在尝试使用 pydub 加载音频文件
AudioSegment.converter = r"D:\user\Python\speech\ffmpeg-7.0.2-essentials_build\bin\ffmpeg.exe"
AudioSegment.ffprobe = r"D:\user\Python\speech\ffmpeg-7.0.2-essentials_build\bin\ffprobe.exe"

path_m4a = r"D:\user\Python\speech\我的錄音_中文測試.m4a"
audio = AudioSegment.from_file(path_m4a, format="m4a")

# 打印音频长度来测试是否成功加载
print("Audio length:", len(audio))

code & 輸出結果:

Python: 如何使用 os.environ["PATH"] 設定環境變數?與 sys.path.append() 差別為何? - 儲蓄保險王

os.environ[“PATH”] += os.pathsep + ffmpeg_bin_path

os.environ[“PATH”]
os.environ 是一个 Python 字典,它提供对环境变量的访问。这些环境变量是操作系统在运行时为每个进程设置的,并且可以通过这个字典来读取和修改。
“PATH” 是一个特定的环境变量,它包含了一系列目录,这些目录是操作系统搜索可执行文件的地方。
os.pathsep
os.pathsep 是系统特定的路径分隔符,在 Windows 上是分号 ;,在 UNIX-like 系统(如 Linux 和 macOS)上是冒号 :。
这个分隔符用于在环境变量如 PATH 中分隔多个路径。
ffmpeg_bin_path
ffmpeg_bin_path 是你定义的一个字符串变量,指向 ffmpeg 和 ffprobe 可执行文件所在的目录。
+=
+= 是一个赋值运算符,用于将右侧的值添加到左侧变量的当前值上。
操作步骤拆解
获取当前的 PATH 环境变量:
os.environ[“PATH”] 获取当前进程的 PATH 环境变量的值,这是一个字符串,包含了多个路径,这些路径由 os.pathsep 分隔。
添加分隔符:
os.pathsep 确保我们添加的新路径不会与现有的路径混淆,即在新路径前放置一个分隔符。
添加新路径:

  • ffmpeg_bin_path 将 ffmpeg 和 ffprobe 的路径添加到 PATH 字符串的末尾。
    更新 PATH 环境变量:
    os.environ[“PATH”] += os.pathsep + ffmpeg_bin_path 通过这个表达式,我们实际上是在原有的 PATH 值后面追加了新的路径。这意味着从这条命令执行之后,操作系统在查找可执行文件时,也会考虑你指定的目录。
    示例
# 原始的 PATH
original_path = os.environ["PATH"]

# 添加的新路径
new_path = r"D:\user\Python\speech\ffmpeg-7.0.2-essentials_build\bin"

# 使用系统特定的分隔符连接原始PATH和新路径
updated_path = original_path + os.pathsep + new_path

# 更新环境变量
os.environ["PATH"] = updated_path

通过这种方式,你在执行 Python 脚本期间,暂时地修改了 PATH 环境变量,使得系统能够在新添加的路径中查找可执行文件,如 ffmpeg 和 ffprobe。这种修改只在当前的 Python 进程中有效,不会影响到其他正在运行或将来运行的进程。

在解释如何在控制台中设置环境变量,以及它们如何与 os.environ[“PATH”] 和 sys.path.append() 相关之前,我们需要先明确这两者的作用和差异。

  1. os.environ[“PATH”]
    作用:os.environ[“PATH”] 是一个环境变量,主要用于告诉操作系统如何在不需要提供程序的完整路径的情况下查找可执行文件。当你运行一个命令或程序时,系统会在 PATH 环境变量指定的目录中搜索可执行文件。
    修改:可以通过修改 os.environ 字典来在 Python 程序运行期间改变环境变量,但这种改变仅限于当前程序的执行环境,并不会影响到操作系统级别或其他程序。
  2. sys.path.append()
    作用:sys.path 是一个 Python 解释器用来查找模块的路径列表。当你导入一个模块时,Python 会依据 sys.path 中的目录来查找这个模块。
    修改:使用 sys.path.append() 可以在程序运行期间动态地添加目录到模块搜索路径列表中。这同样是临时的,只影响当前正在运行的 Python 程序。
    设置环境变量在控制台
    在控制台或终端中设置环境变量的方法取决于你的操作系统。

Windows
在命令提示符(CMD)或 PowerShell 中,你可以使用以下命令来设置环境变量:
set PATH=%PATH%;C:\your\path\here
这种方式设置的环境变量只会影响当前窗口中启动的程序。
控制台设置的影响
当你在控制台中设置环境变量时,它类似于在 Python 程序中通过 os.environ[“PATH”] = … 进行设置,因为它会改变环境变量的值,影响所有在此环境下执行的程序的行为。然而,它不具备 sys.path.append() 的效果,因为它不影响 Python 的模块搜索路径。

如果你希望在系统层面永久设置环境变量,通常需要通过系统设置(如 Windows 的系统属性或 Linux 的 profile 文件)来实现。这样设置的环境变量会在每次启动时自动应用,从而影响所有相关程序的行为。

总结来说,控制台设置环境变量可以模拟 os.environ 的修改,但与 sys.path.append() 作用不同,后者专门用于 Python 模块加载路径的设置。

在操作系统中将 PATH 环境变量设置为包含非常广泛的目录,如整个 C:\ 或 D:\ 盘,可能看起来是一个确保系统能找到所有必要可执行文件的简便方法,但实际上,这种做法带来的风险和问题远大于其带来的便利。以下是设置如此广泛路径时可能遇到的几个主要问题:

  1. 安全风险
    恶意软件:如果你将 PATH 设置得过于广泛,恶意软件只需将可执行文件放在任何 PATH 目录下的易访问位置即可。这可能导致恶意程序更容易被无意中执行。
    覆盖系统命令:恶意程序可能通过与系统命令同名的方式来欺骗用户运行它们,如果 PATH 包括了不安全的目录,这种风险更高。
  2. 性能问题
    搜索时间增加:当你执行一个命令时,系统会按照 PATH 环境变量中的目录顺序查找可执行文件。包含整个磁盘的 PATH 会显著增加查找时间,特别是磁盘较慢或目录结构复杂时。
    错误的程序版本执行:如果有多个版本的程序散布在不同的目录中,可能不小心运行了错误的版本。
  3. 管理复杂性
    维护困难:如果 PATH 包括了过多的目录,管理和排查问题(如确定哪个版本的某个程序被执行)会变得更加复杂。
    建议的做法
    精确指定:仅将确实需要的、信任的程序目录添加到 PATH。
    使用完整路径执行程序:对于不常用或不想添加到全局 PATH 的程序,可以在需要时使用完整路径直接调用。
    定期审查 PATH:检查 PATH 设置,移除不再需要或不安全的目录项。
    结论
    将 PATH 环境变量设置为非常广泛的目录(如整个磁盘)通常不是一个好主意。这样做会增加安全风险,导致性能问题,以及增加系统维护的复杂性。更安全和高效的方法是仅将必要和安全的目录添加到 PATH。

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python: 如何使用 os.environ["PATH"] 設定環境變數?與 sys.path.append() 差別為何? - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *