為什么export PYTHONPATH=$PYTHONPATH 將當前工作目錄放在系統路徑?


在修改以冒號分隔的環境變量時,例如 PYTHONPATH、PATH、CPATH、MANPATH、LD_LIBRARY_PATH、PKG_CONFIG_PATH 等......其中一些變量對尾隨冒號具有特殊意義,而其他變量則沒有。

對於 PYTHONPATH 和 PATH,如果變量之前未設置,可以以不會意外引入尾隨(或前導)冒號的方式預先(或附加)新目錄:

export PYTHONPATH="/some/path${PYTHONPATH+":"}${PYTHONPATH-}"

解釋:

${PYTHONPATH+":"}擴展為 :如果設置了 PYTHONPATH,無論 PYTHONPATH 是否為空。

${PYTHONPATH-}如果設置了將擴展到 PYTHONPATH 的內容,但如果未設置 PYTHONPATH,則 ${PYTHONPATH-}擴展為空 --- 就像通常的 ${PYTHONPATH} .

${PYTHONPATH-}與 ${PYTHONPATH-""} 相同意思是在未設置 PYTHONPATH 時替換 ""(無)。

推薦理由${PYTHONPATH-}在 ${PYTHONPATH}這是${PYTHONPATH-}當 PYTHONPATH 未設置且您的腳本已執行時,不會產生錯誤 set -u引發未設置變量的錯誤。

例如:

 export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH 會引入當前工作目錄

[root@node02 ~]# python3 #當前目錄為/root
Python 3.7.8 (default, Apr 27 2021, 13:33:25)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/spark-2.4.3-bin-hadoop2.7/python', '/usr/local/spark-2.4.3-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip', '/root', '/usr/local/python3/lib/python37.zip', '/usr/local/python3/lib/python3.7', '/usr/local/python3/lib/python3.7/lib-dynload', '/usr/local/python3/lib/python3.7/site-packages']

export PYTHONPATH="/tmp${PYTHONPATH+":"}${PYTHONPATH-}" 不會引入當前工作目錄

[root@node02 ~]# python3   #當前目錄為 /root
Python 3.7.8 (default, Apr 27 2021, 13:33:25)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/tmp', '/usr/local/python3/lib/python37.zip', '/usr/local/python3/lib/python3.7', '/usr/local/python3/lib/python3.7/lib-dynload', '/usr/local/python3/lib/python3.7/site-packages']


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM