python如何修改PYTHONPATH環(huán)境變量
查看當(dāng)前python環(huán)境
我們進(jìn)入到conda中的mmlab
環(huán)境中,運(yùn)行下面命令
(mmlab) wangyh@Ti-Sev:~$ python -m site sys.path = [ '/home/wangyh', '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages', ] USER_BASE: '/home/wangyh/.local' (exists) USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist) ENABLE_USER_SITE: True
可以看到當(dāng)前python環(huán)境和相關(guān)包的信息,也就是sys.path
中的內(nèi)容,有運(yùn)行命令的當(dāng)前目錄/home/wangyh
,還有我當(dāng)前環(huán)境mmlab
的安裝目錄xxx/envs/mmlab/lib/xxx,也就是說默認(rèn)的python在導(dǎo)入module的時(shí)候,默認(rèn)從當(dāng)前目錄下以及當(dāng)前環(huán)境目錄下來搜索
為什么要添加python環(huán)境?
假設(shè)我們當(dāng)前的程序目錄如下所示
- data - hello - hello.py - data2 - test.py
我們進(jìn)入到data2文件夾下要運(yùn)行test.py
文件,用的環(huán)境還是上面的mmlab
,那么此時(shí)我們的環(huán)境變量
如下所示
'/data2' '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip' '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10' '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload' '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages'
第一個(gè)環(huán)境變?yōu)榱?code>/data2是因?yàn)?code>test.py在data2
目錄下,因?yàn)榄h(huán)境還是mmlab
所以剩下的python環(huán)境不變,
現(xiàn)在hello.py
中有一個(gè)greet
函數(shù),我們想在test.py
中引入此函數(shù),即from hello import greet
,
但是此時(shí)會報(bào)錯(cuò),
No module named xxx
這是因?yàn)榫幾g器會自動在上述環(huán)境變量中去尋找hello,但是環(huán)境變量中沒有hello文件夾,此時(shí)就需要在python環(huán)境變量中添加/data/hello路徑了
添加python環(huán)境
1.臨時(shí)添加
程序中加入sys庫
>>> import sys >>> sys.path ['', '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages'] >>> sys.path.append('/data/hello') >>> sys.path ['', '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages', '/data/hello']
可以看到此時(shí)/data/hello
就添加到python環(huán)境變量中去了,一旦腳本運(yùn)行完畢,此環(huán)境變量就失效了,如果要再次使用需要再次運(yùn)行
2.export命令
在終端中添加環(huán)境變量
export PYTHONPATH=/data/hello:$PYTHONPATH
或者
export PYTHONPATH=$PYTHONPATH:/data/hello
(mmlab) wangyh@Ti-Sev:~$ python -m site sys.path = [ '/home/wangyh', '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages', ] USER_BASE: '/home/wangyh/.local' (exists) USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist) ENABLE_USER_SITE: True (mmlab) wangyh@Ti-Sev:~$ export PYTHONPATH=/data/hello:$PYTHONPATH (mmlab) wangyh@Ti-Sev:~$ python -m site sys.path = [ '/home/wangyh', '/data/hello', '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages', ] USER_BASE: '/home/wangyh/.local' (exists) USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist) ENABLE_USER_SITE: True
可以看到添加python環(huán)境變量之后多了/data/hello
,但是只對于當(dāng)前終端生效,一旦終端關(guān)閉立刻失效,如果要重新添加需要重新export
永久生效
1.修改.bashrc文件
# 修改用戶主目錄下的.bashrc文件 vim ~/.bashrc # 添加之前的環(huán)境變量 export PYTHONPATH=/data/hello:$PYTHONPATH # 保存退出,更新環(huán)境變量使其生效 source ~/.bashrc
此方法只適用于當(dāng)前用戶,不適用于所有用戶,比如別人登錄他們的賬號,他的環(huán)境變量不受影響
2.修改pth文件
還有一種方法是修改當(dāng)前環(huán)境下的一個(gè)xx/anaconda3/envs/xxx/lib/python3.x/site-packages/xxx.pth文件,這個(gè)我沒試過就不寫了,主要是懶
注意?。。。?!
根據(jù)我的經(jīng)驗(yàn),不知道是設(shè)置問題還是操作問題,如果你的python環(huán)境變量不是當(dāng)前conda環(huán)境的路徑,比如本來應(yīng)該是xxx/envs/mmlab/xxx,但是變成了xxx/anaconda3/lib/python3.x/xxx這種路徑,那么多半是終端開的比較多啥的。。。
或者開了好多窗口export亂了,終端都關(guān)了重新打開就好了,當(dāng)時(shí)的我反正一臉疑惑。。。
這還會帶來一個(gè)問題,就是如果你在當(dāng)前環(huán)境安裝包的話,他會安裝到別的地方,所以就直接把終端都關(guān)了重新打開來解決問題就行。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python內(nèi)置函數(shù)breakpoint()與bytearray()示例詳解
本文給大家分享的是python內(nèi)置函數(shù)breakpoint()與bytearray()的相關(guān)資料,并給大家附上了詳細(xì)代碼,有需要的小伙伴可以參考下2017-04-04Python實(shí)現(xiàn)K-近鄰算法的示例代碼
k-近鄰算法(K-Nearest Neighbour algorithm),又稱 KNN 算法,是數(shù)據(jù)挖掘技術(shù)中原理最簡單的算法。本文將介紹實(shí)現(xiàn)K-近鄰算法的示例代碼,需要的可以參考一下2022-09-09