PATH
在PATH中的 python module 不能被 import,在 PATH 中的一些命令,例如 *.exe,可以直接在cmd中運行,而不用明確的路徑,我們在給 python 安裝一些 packages 的時候,有一些 Scripts 被安裝到 /Scripts 文件夾中,如果 /Scripts 文件夾路徑不在 PATH 中,會有提示
PATH是系統環境變量,PATH作用是用戶在命令行窗口執行一個命令,則在PATH變量設置的目錄下依次尋找該命令或對應的執行文件,若找到,則執行,若沒有找到,則命令行窗口返回無效命令
path是告訴系統,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到那些目錄下去找。
關於PATH的作用:
PATH說簡單點就是一個字符串變量,當輸入命令的時候LINUX會去查找PATH里面記錄的路徑。比如在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實ls這個命令根本不在這個兩個目錄下,事實上當你輸入命令的時候LINUX會去/bin,/usr/bin,/sbin等目錄下面去找你此時輸入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒號使目錄與目錄之間隔開。
關於新增自定義路徑:
現在假設你新安裝了一個命令在/usr/locar/new/bin下面,而你又想像ls一樣在任何地方都使用這個命令,你就需要修改環境變量PATH了,准確的說就是給PATH增加一個值/usr/locar/new/bin。你只需要一行bash命令export PATH=$PATH:/usr/locar/new/bin。這條命令的意思太清楚不過了,使PATH自增:/usr/locar/new/bin,既PATH=PATH+":/usr/locar/new/bin";通常的做法是把這行bash命令寫到/root/.bashrc的末尾,然后當你重新登陸LINUX的時候(應該是linux啟動時就會執行這個文件),新的默認路徑就添加進去了。當然這里你直接用source /root/.bashrc執行這個文件重新登陸了。你可以用echo $PATH命令查看PATH的值。
關於刪除自定義路徑:
當某天你發現你新增的路徑/usr/locar/new/bin已經沒用了的話,你可以修改/root/.bashrc文件里面你新增的路徑。或者你可以修改/etc/profile文件刪除你不需要的路徑.
一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設置環境變量。例如我的mips-linux-gcc編譯器在“/opt/au1200_rm/build_tools/bin”目錄下,build_tools就是我的編譯工具,則有如下三種方法來設置環境變量:
--------------------------------------------
臨時環境變量(重啟后消失)
-----------------------------------------------------
1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已經設好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到,環境變量已經設好,PATH里面已經有了我要加的編譯器的路徑。
里去操作了。
永久環境變量
--------------------------------------------------------
2、修改profile文件:
所有用戶(不安全)
修 改/etc/profile(對所有用戶都是有效的)
#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
3. 修改.bashrc文件:
# vi /~/.bashrc
(單獨用戶)
修改~/.bashrc文件。 htt(74)p://www.icwin.net/bbs http://www.wantso.com (每個用戶目錄下都有,ls -all)
cd ~
vi .bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
后兩種方法一般需要重新注銷系統才能生效,最后可以通過echo命令測試一下:
# echo $PATH
看看輸出里面是不是已經有了/my_new_path這個路徑了。
-----------------------------------------------------------------------------------------------------------------------
“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路徑已經在系統環境變量中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟件可執行文件的文件名和參數(如果需要參數),回車即可。
如果不在標准位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個“一勞永逸”的辦法是把這個路徑加入環境變量。命令 “PATH=$PATH:路徑”可以把這個路徑加入環境變量,但是退出這個命令行就失效了。要想永久生效,需要把這行添加到環境變量文件里。有兩個文件可選:“/etc/profile”和用戶主目錄下的“.bash_profile”,“/etc/profile”對系統里所有用戶都有效,用戶主目錄下的“.bash_profile”只對這個用戶有效。
“PATH=$PATH:路徑1:路徑2:...:路徑n”,意思是可執行文件的路徑包括原先設定的路徑,也包括從“路徑1”到“路徑n”的所有路徑。當用戶輸入一個一串字符並按回車后,shell會依次在這些路徑里找對應的可執行文件並交給系統核心執行。那個“$PATH”表示原先設定的路徑仍然有效,注意不要漏掉。某些軟件可能還有“PATH”以外類型的環境變量需要添加,但方法與此相同,並且也需要注意“$”。
注意,與DOS/Window不同,UNIX類系統環境變量中路徑名用冒號分隔,不是分號。另外,軟件越裝越多,環境變量越添越多,為了避免造成混亂,建議所有語句都添加在文件結尾,按軟件的安裝順序添加。
格式如下():
# 軟件名-版本號
PATH=$PATH:路徑1:路徑2:...:路徑n
其他環境變量=$其他環境變量:...
在“profile”和“.bash_profile”中,“#”是注釋符號,寫在這里除了視覺分隔外沒有任何效果。
設置完畢,注銷並重新登錄,設置就生效了。如果不注銷,直接在shell里執行這些語句,也能生效,但是作用范圍只限於執行了這些語句的shell。
相關的環境變量生效后,就不必老跑到軟件的可執行文件目錄
原文鏈接:http://blog.sina.com.cn/s/blog_a3fb4c660102vbmv.html
PYTHONPATH
如果我們使用 PYTHONPATH 中的 modules,那么在運行 python 前,就要把 path 加到 os.environ['PYTHONPATH'],在運行 python 后再加,那些模塊不能直接被導入
不太好的解決辦法
1 |
import sys |
在 google 模塊導入問題的時候,大部分博客給出了這樣的解決方案,在每個文件配置
這樣的代碼,他做到了將當前文件的路徑加入到 Python 模塊搜索路徑 sys.path 中,
確實可以起到解決 bug 的作用,但是每個文件都寫上這樣一段代碼,實在讓人不舒服,
下面我們還是來學習下 Python 模塊搜索路徑是如何運作的
Python 從哪些路徑導入模塊
1 |
1、程序的主目錄 |
主目錄
Python 首先會在主目錄內搜索導入的文件。如果程序完全位於單一目錄,所有導入的會
自動工作,而並不需要配置路徑。由於這個目錄總是先搜索,其文件也將覆蓋路徑上的
其他目錄中具有同樣名稱的模塊。如果你需要在自己程序中使用庫模塊的話,小心不要
以這種方式以外地隱藏庫模塊。
PYTHONPATH 目錄
之后,Python 會從左到右搜索 PYTHONPATH 環境變量設置中羅列出的所有目錄,可以是
用戶定義或平台特定的目錄名。因為 Python 優先搜索主目錄,當導入的文件跨目錄時,
這個設置才顯得格外重要。
標准庫目錄
接着,Python 會自動搜索標准庫模塊安裝在機器上的那些目錄,這塊通常不需要在單獨
配置
.pth 文件目錄
最后,Python 有個相當新的功能,允許用戶把有效的目錄添加到模塊搜索路徑中去,
也就是在后綴名為 .pth (路徑的意思)的文本文件中一行一行的列出目錄。他是
PYTHONPATH 的一種替代方案,我們也可以把它放在標注庫所在位置的 sitepackages 的
子目錄中擴展模塊搜索路徑
應用到當前項目
在開發大型項目之前,我們可以將項目根目錄作為 PYTHONPATH 存到環境變量中,也可以
每次運行前之前該命令
| 1 2 3 4 |
$ touch env.sh |
最后我們可以通過下面兩行代碼來查看當前項目python模塊搜索路徑和導入的模塊
1 |
|
轉載於:https://wxnacy.com/2017/08/15/python-2017-08-15-config-pythonpath/
sys.path
官方文檔說明:A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.
sys.path 初始化的時候有兩部分:os.environ['PYTHONPATH'] 和 默認的安裝依賴的一些路徑(例如 python 安裝的根目錄 和 pythonxx.zip)
sys.path 的作用:
- 與 PYTHONPATH 不同,sys.path 可以在 python 運行后添加我們的 module path,然后直接 import,應該說python只搜索 sys.path 中的 modules,不搜索
- 我們可以通過 os.environ['PYTHONPATH'] 來傳遞我們的 module path
- 我們可以給 python 添加自定義的 module path,讓 python 在運行的時候自動加到 sys.path 中,方法是 在 /Lib/site-packages/ 中添加 *.pth 文件,在文件里面加上 module path,參考鏈接:https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574
轉載於:https://blog.csdn.net/weixin_30402343/article/details/96321133
