【问题标题】:What is the difference between tacking onto the PATH variable and creating a new one?附加到 PATH 变量和创建一个新变量之间有什么区别?
【发布时间】:2020-07-19 02:17:04
【问题描述】:

我注意到在某些 Python 安装过程中,创建了一个名为 PYTHONPATH 的新环境变量。

在我看过的每个教程中,设置命令行使用的方法都是使用分号将 .exe 文件的目录附加到 PATH 环境变量中:

%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
C:\Program Files\Python38;
C:\Program Files\Python38\Scripts;
%PyCharm Community Edition%;
C:\Users\WNeill\AppData\Roaming\npm;
C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin; 
C:\Program Files\MySQL\MySQL Server 8.0\bin 

但是,当我解决一些从命令行启动 MySQL 的问题时,我注意到有一个单独的 PYTHONPATH 变量。它引用了我机器上不再存在的 32 位 python 版本的目录。

这让我想到了一个问题,PATH 变量有什么特别的作用吗,或者我可以为每个目录设置单独的变量,例如SQLPATH、PYTHONPATH、JAVAPATH 等?

【问题讨论】:

    标签: command-line environment-variables


    【解决方案1】:

    PATH 变量的特殊之处在于它被命令处理器 (cmd.exe) 用于查找任何被调用但在当前目录中不存在的可执行文件。此检索是自动完成的,并按照 PATH 变量中给定的顺序执行。例如,从文件系统的任何位置调用驻留在 Python38 文件夹或 Java 安装文件夹中的任何 .exe 文件,您只需输入文件名(例如 javac myfile.java)并按回车键即可执行(假设 Java安装目录是 PATH 变量的一部分)。
    您可以尝试在命令行上使用where 来获得关于真正调用了哪个可执行文件的线索,如果您只是输入一个没有显式路径的文件名。在命令行中键入where /? 以获取帮助说明。例如where java 应该给你一个像C:\Program Files\Java\Java 1.8\java.exe 这样的路径。
    PATH 功能与可以在命令行中键入 calc 并查看正在调用的计算器应用程序的原因相同。这是因为通常C:\Windows\System32\ 是PATH 的一部分,而calc.exe 位于此目录中。

    如果您定义自己的环境变量(如 PYTHONPATH 等),则不会在此类定义上自动调用此“自动搜索”功能。但是,您可以在批处理文件中使用这些定义来做一些事情,Python 或任何创建这些变量的应用程序都可能使用它们来检索它们的文件。如果此变量丢失并且应用程序专门检查此变量以调用或检索此路径上的某些文件,则即使将目录添加到 PATH 环境变量中,应用程序也会失败(除非应用程序也尝试仅调用文件并希望通过 PATH 自动解决)。

    在您自己的批处理文件中,您可以执行类似的操作

    SET JAVAPATH=....
    SET PYTHONPATH=....
    SET PATH=%JAVAPATH%;%PYTHONPATH%
    

    以更结构化的方式构建您的 PATH 变量。请注意,此 PATH 定义仅在批处理文件的范围内有效。它不会改变 Windows 在系统设置中维护的 PATH。

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2013-07-06
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多