PATH的作用以及为什么能找到指定的python

环境变量

  • 因为设置的环境变量PATH,在.bashrc中就已经设定好了
  • 使用了export定义,可以由子进程继承这个变量,一般的环境变量无法被子进程继承

验证过程

  1. 当我们输入echo $PATH的时候, 输出结果如下
home/mayilong/.autojump/bin:/home/mayilong/anaconda3/bin:/home/mayilong/anaconda3/condabin:/home/mayilong/anaconda3/bin:/home/mayilong/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/cuda-10.0/bin:/home/mayilong/.fzf/bin
  1. 可以看到第二个就是/home/mayilong/anaconda3/bin,进入该目录,可以看到python是一个软链接,其执行的真正的可执行文件是python3.7
▶ ll | grep python
-rwxrwxr-x 1 mayilong mayilong  247 2月  21  2019 ipython
-rwxrwxr-x 1 mayilong mayilong  247 2月  21  2019 ipython3
lrwxrwxrwx 1 mayilong mayilong    9 2月  21  2019 python -> python3.7
lrwxrwxrwx 1 mayilong mayilong    9 2月  21  2019 python3 -> python3.7
-rwxrwxr-x 1 mayilong mayilong  13M 2月  21  2019 python3.7
lrwxrwxrwx 1 mayilong mayilong   17 2月  21  2019 python3.7-config -> python3.7m-config
lrwxrwxrwx 1 mayilong mayilong    9 2月  21  2019 python3.7m -> python3.7
-rwxrwxr-x 1 mayilong mayilong 3.4K 2月  21  2019 python3.7m-config
lrwxrwxrwx 1 mayilong mayilong   17 2月  21  2019 python3-config -> python3.7m-config
  1. 所以无论我们在哪个路径下,输入python都会默认启动/home/mayilong/anaconda3/bin/python3.7,可以使用which来验证
▶ which python
/home/mayilong/anaconda3/bin/python
  1. 当我切换到一个新的环境的时候,相应的python执行路径也发生了改变
▶ source activate paddle
▶ echo ${PATH}
  • 环境变量PATH的值
    /home/mayilong/.autojump/bin:/home/mayilong/anaconda3/envs/paddle/bin:/home/mayilong/anaconda3/condabin:/home/mayilong/anaconda3/bin:/home/mayilong/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/cuda-10.0/bin:/home/mayilong/.fzf/bin
  1. 到底是如何切换的呢?原来是因为conda自带了一个软件activate,它存在于我的机器上环境变量PATH第四个路径之下(/home/mayilong/anaconda3/bin),所以可以直接调用source activate pytorch来切换环境,也可以使用 . activate pytorch 效果一样
▶ which activate
/home/mayilong/anaconda3/bin/activate
mayilong@img:~/anaconda3/bin
▶ ll /home/mayilong/anaconda3/bin/activate
-rwxrwxr-x 1 mayilong mayilong 198 3月  19  2019 /home/mayilong/anaconda3/bin/activate
  1. python路径优先级

这是使用sys.path显示的结果

['/data/mayilong/PycharmProjects/07/paddle_ocr/test_dir',   '/data/mayilong/PycharmProjects/07/paddle_ocr', '/home/mayilong/anaconda3/envs/paddle/lib/python36.z
ip', '/home/mayilong/anaconda3/envs/paddle/lib/python3.6', '/home/mayilong/anaconda3/envs/paddle/lib/python3.6/lib-dynload', '/home/mayilong/anaconda3/envs/pa
ddle/lib/python3.6/site-packages']

优先级

  • 要执行的文件所在的路径
    • /data/mayilong/PycharmProjects/07/paddle_ocr/test_dir
  • PYTHONPATH路径
    • /data/mayilong/PycharmProjects/07/paddle_ocr
  • 系统路径
    • /home/mayilong/anaconda3/envs/paddle/lib/python36.z
      ip, /home/mayilong/anaconda3/envs/paddle/lib/python3.6, /home/mayilong/anaconda3/envs/paddle/lib/python3.6/lib-dynload, /home/mayilong/anaconda3/envs/pa
      ddle/lib/python3.6/site-packages

你可能感兴趣的:(python,linux)