对命令行和环境变量的理解
对命令行和环境变量的理解:
各个命令行工具都会到环境变量PATH下找命令。如果命令的路径在PATH下,就能运行,否则不能。
考虑一下场景:
python -m pip 可以运行,但是pip命令不能运行。
python -m pip 可以运行,是因为python.exe 的路径是在PATH下。
但是pip命令不能运行,是因为pip.exe 不在PATH中。
如果将pip.exe的路径也加入PATH中,则可以在命令行中运行pip.
我的pip路径是:C:\Users\Z\AppData\Local\Programs\Python\Python38\Scripts\pip.exe
命令行中 python -m pip 和直接运行 pip 的关系:
查看-m 选项的意思:
-m mod : run library module as a script (terminates option list)
也就是说运行python.exe, 然后给个参数 -m pip,即运行python 库 pip。
综合上面所述,python能在命令行运行,再加上参数 -m pip, 所以 pip 这个库被python调用,跑起来了。 也说明了pip是安装上了的。那剩下的就是把pip的路径加入PATH。
第二个例子:pycharm配置os.environ环境
问题:pycharm中os.environ不能读取到terminal中的系统环境变量,即pycharm中os.environ不能读取.bashrc参数
使用pycharm,无论在python console还是在module中使用os.environ返回的dict中都没有~/.bashrc
中的设置的变量,但是有/etc/profile中的变量配置。然而在terminal中使用python,os.environ却可以获取~/.bashrc的内容。
解决方法:
在~/.bashrc中设置的系统环境只能在terminal shell下运行spark程序才有效,因为.bashrc is only read for interactive shells.
如果要在当前用户整个系统中都有效(包括pycharm等等IDE),就应该将系统环境变量设置在~/.profile
文件中。如果是设置所有用户整个系统,修改/etc/profile
或者/etc/environment
吧。
第三个例子
alias 命令不会产生一个新定义的环境变量
比如:在~/.bashrc
添加 alias his = history
, 是不会产生新的变量 his
的。而是应该通过 export his=history
来添加环境变量。
本人因为误以为设置了 alias ,环境中就应该有这个变量,而导致脚本中出现 his
命令是都运行失败。