Linux 將文件夾添加到 sys.path



1、問題

添加 Python 代碼到 sys.path 里。



2、解決方案

有兩種常用的方式。

第一:使用 pythonpath 環境變量來添加。

[root@localhost ~]# vim ~/.bashrc 
export PYTHONPATH=/some/dir:/other/dir python3
    
[root@localhost ~]# source ~/.bashrc 

查看結果:

[root@localhost ~]# python
Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/some/dir', '/other/dir', '/usr/local/anaconda3/lib/python37.zip', '/usr/local/anaconda3/lib/python3.7', '/usr/local/anaconda3/lib/python3.7/lib-dynload', '/usr/local/anaconda3/lib/python3.7/site-packages']



第二:site-packages 下創建 .pth 文件。

[root@localhost ~]# cd /usr/local/anaconda3/lib/python3.7/site-packages
[root@localhost site-packages]# vim myapplication.pth 
/some/dir
/other/dir

[root@localhost site-packages]# source myapplication.pth 
-bash: /some/dir: 是一個目錄
-bash: /other/dir: 是一個目錄

前提要確保目錄 /some/dir/other/dir 存在。

.pth 文件必須放在 site-packages 里,里面的內容(文件目錄)可以是任何位置。


查看結果:

[root@localhost site-packages]# python
Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/anaconda3/lib/python37.zip', '/usr/local/anaconda3/lib/python3.7', '/usr/local/anaconda3/lib/python3.7/lib-dynload', '/usr/local/anaconda3/lib/python3.7/site-packages', '/some/dir', '/other/dir']



3、討論

比起費力找文件,更傾向於用代碼調節 sys,path 的值。

import sys
sys.path.insert(0, '/some/dir')
sys.path.insert(0, '/other/dir')

雖然這個能 “工作”,但極為脆弱,避免使用。

這種方法問題是:將目錄名硬編碼到源代碼。如果代碼被移到新位置,會產生維護問題。


更好的做法,不修改源代碼,將 path 配置到其他地方。

如果我們使用模塊級的變量來構造一個絕對路徑,可以解決硬編碼目錄問題。如__file__

import sys
from os.path import abspath, join, dirname
sys.path.insert(0, join(abspath(dirname(__file__)), 'src'))

src 目錄添加到 path 里,和執行插入步驟的代碼在同一個目錄里。




免責聲明!

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



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