变量$PATH
,sys.path
和os.environ
有什么区别?我知道它们都是python搜索包的路径,但是如果有更详细的响应就更好了。
我实践中的一个案例是,在Ubuntu 16.04上导入之前,我使用的脚本只有os.environ
,我得到了ImportError: No module named XXX
。同时,在MacOS上它运行良好。在Ubuntu上添加sys.path
后,我可以很好地得到导入模块。
变量$PATH
,sys.path
和os.environ
有什么区别?我知道它们都是python搜索包的路径,但是如果有更详细的响应就更好了。
我实践中的一个案例是,在Ubuntu 16.04上导入之前,我使用的脚本只有os.environ
,我得到了ImportError: No module named XXX
。同时,在MacOS上它运行良好。在Ubuntu上添加sys.path
后,我可以很好地得到导入模块。
2条答案
按热度按时间owfi6suc1#
这实际上比看起来要复杂得多。如果你理解Linux/MacOS $PATH环境变量,这个问题就不清楚了。让我们从那里开始。$PATH变量(在Python中,你可以从os.environ访问系统环境变量)表示当前用户在各种shell配置文件和环境文件中定义的$PATH变量。和其他安装程序的地方。例如,当你在系统shell中输入"ls"时,底层系统会在$PATH中搜索名为"ls"的程序。因此,实际执行的可能是类似于"/usr/bin/ls "的内容。
另一方面,sys.path是在解释器启动时由Python基于许多事情构造的。帮助页面中的第一句话如下:"指定模块搜索路径的字符串列表。从环境变量$PYTHONPATH初始化,加上安装相关的默认值。"安装相关的部分通常定义Python站点包的安装位置。$PYTHONPATH是另一个环境变量(类似于$PATH),可以添加它以方便模块搜索位置,并且可以使用与系统$PATH相同的方式进行设置
通常,如果你有未安装的源代码(即你有Python文件,你想在site-packages目录之外运行),你通常需要直接在脚本中操作sys.path,或者将位置添加到$PYTHONPATH环境变量中,这样解释器就知道在哪里可以找到你的模块。
这只是一个基本的概述,我希望你阅读文档更好地理解
来源
zysjyyx42#
系统路径
指定模块搜索路径的字符串列表。从环境变量PYTHONPATH加上一个与安装相关的默认值初始化。
外部环境
代表字符串环境的Map对象。例如,environ['HOME']是主目录的路径名(在某些平台上),相当于C语言中的getenv(“HOME”)。
环境变量PATH
指定可执行程序所在的一组目录。通常,每个正在执行的进程或用户会话都有自己的PATH设置。