【python】搞懂環(huán)境變量從此3P都不怕... PATH、sys.path、PYTHONPATH

安裝pillow或者PIL這個(gè)問題我承認(rèn)我一直一知半解。
廖大的教程是這么說的:


然而我的結(jié)果是這樣:


看來要好好搞懂python環(huán)境了(mac系統(tǒng))

python 是個(gè)編程語言,python 也是個(gè)程序
pip 是用 python 語言編寫的的一個(gè)程序,主要用來安裝第三方的模塊
通過PATH 這個(gè)環(huán)境變量來控制使用哪個(gè)位置的python和pip
sys.path 是 python 中 sys 模塊中的一個(gè)變量,控制 import 時(shí)去哪里查找模塊
PYTHONPATH 是個(gè)環(huán)境變量,也可以控制 import 時(shí)去哪里查找模塊

Mac配置環(huán)境變量的地方

  1. /etc/profile (建議不修改這個(gè)文件 )
    全局(公有)配置,不管是哪個(gè)用戶,登錄時(shí)都會(huì)讀取該文件。
  2. /etc/bashrc (一般在這個(gè)文件中添加系統(tǒng)級(jí)環(huán)境變量)
    全局(公有)配置,bash shell執(zhí)行時(shí),不管是何種方式,都會(huì)讀取此文件。
  3. ~/.bash_profile (一般在這個(gè)文件中添加用戶級(jí)環(huán)境變量)
    每個(gè)用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次!

當(dāng)在終端輸入$python時(shí),Python使用哪里的哪個(gè)版本?

  1. 路徑:python 是個(gè)編程語言,python 也是個(gè)程序,通過PATH 這個(gè)環(huán)境變量來控制使用哪個(gè)位置的python程序
  2. 路徑查看$ echo $PATH
    我目前PATH是/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 多個(gè)路徑是從前往后找的,只要找到對(duì)應(yīng)的程序就不會(huì)再往后找了。比如在第一個(gè)路徑/usr/local/bin下我有python python2 python2.7 python3 等文件,它們都是快捷方式,指向了實(shí)際的python程序。所以$python就找到了python所以就用它了,不用再往PATH中的下一個(gè)目錄找
  3. 路徑修改
    整個(gè)修改$ export PATH=/xxx:/xxx
    添加單個(gè)$export PATH=/xxx:$PATH
    但這樣重啟中斷后就恢復(fù)原樣了。所以應(yīng)該打開~/.bash_profile 再底下添加
    export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH
  4. 版本和位置查看$which python2 就可以看到輸入python2調(diào)用的是哪一個(gè)python文件,$python2 -V 就可以看到輸入python2調(diào)用的python文件是哪一個(gè)版本 。
    比如我$which python 得到/usr/local/bin/python。然后$ python -V得到Python 3.6.1 表示我輸入python后使用的是這個(gè)位置的python,它是3.6.1版本,因?yàn)槲乙话阌?.6版本,所以把python3.6真身導(dǎo)出快捷方式放到/usr/local/bin下,命名為 python,這樣輸入python默認(rèn)就是3.6版本了

pip

  1. 什么是pip: 是用 python 語言編寫的的一個(gè)程序,主要用來安裝第三方的模塊。說明手冊(cè)可以看這里
  2. 當(dāng)在終端使用$pip時(shí),使用哪里的哪個(gè)pip?
    同上,通過PATH 這個(gè)環(huán)境變量來控制使用哪個(gè)位置的pip工具
  3. pip install 的pillow裝在哪里呢?
    $ pip show --files pillow 得到位置: /usr/local/lib/python2.7/site-packages
  4. 如何修改pip install路徑?
    我也不知道,不過可以在安裝某包時(shí)指定目錄
    pip install --target=d:\somewhere\other\than\the\default package_name
  5. pip安裝的file應(yīng)該如何被import的呢?
    看下面

當(dāng)在python里import 模塊時(shí),導(dǎo)入的是哪里的模塊?

  1. Python搜索模塊的路徑
    1). 當(dāng)前程序的主目錄
    2). PYTHONPATH目錄
    3). 標(biāo)準(zhǔn)連接庫目錄(一般在/usr/local/lib/python2.X/)
    4). 任何的.pth文件的內(nèi)容(如果存在的話).新功能,允許用戶把有效果的目錄添加到模塊搜索路徑中去.pth后綴的文本文件中一行一行的地列出目錄。
  2. 路徑查看>>> import sys >>> sys.path
    sys.path 是 python 中 sys 模塊中的一個(gè)變量,可以控制 import 時(shí)去哪里查找模塊。上述這四個(gè)組合起來就是sys.path。
  3. 修改PYTHONPATH:PYTHONPATH 只是 python 使用的環(huán)境變量,PATH 主要是 shell 使用,其他程序可能也會(huì)使用的環(huán)境變量。我沒有單獨(dú)創(chuàng)建過PYTHONPATH ,所以默認(rèn)就是PATH吧(有錯(cuò)請(qǐng)指出)。

如此一來PIL/pillow的安裝和使用就沒問題了

Pillow 是 PIL的對(duì)Python3支持的另外一個(gè)分支,當(dāng)然他對(duì)Python2也兼容。

遇到的一個(gè)蠢問題:

我今天折騰半天。。一直不理解為什么這倆不一樣:

python2 sys.path

python3 sys.path

可是為什么我的python2明明在usr/里頭,sys.path卻是/Library開頭,我們知道Python搜索模塊的路徑首先是當(dāng)前程序的主目錄,應(yīng)該是/usr開頭才對(duì)呀。
導(dǎo)致在python2里 用不了PIL庫 因?yàn)閜ip2安裝的庫不在/Library里。
后來才發(fā)現(xiàn):
python2快捷方式的實(shí)際指向

可能是哪天我!!!手賤!!!把/Library里的python2.7快捷方式扔進(jìn)了 usr/里。所以只是which看到python的位置還不夠,請(qǐng)點(diǎn)開文件夾查看那東西到底指向哪里。別被騙了

最后,謝謝G神和米爾克指導(dǎo)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容