關於VS Code調試Python時的執行路徑

0.問題

在Python中按F5執行py文件時,默認是從當前打開的文件夾目錄爲執行路徑。如果main入口在文件夾頂層還好,如果在子文件夾就會有些問題,比如相對路徑導入模塊時會報錯。

如下,我執行子文件夾目錄的moduleb.py,就報錯說找不到另一個文件夾的模塊(在main.py導入moduleb是正常的):

通過打印當前執行目錄,可以發現路徑還在VS Code打開文件夾的頂層目錄:

import os
print(os.getcwd())

 

百度了一下VS Code在當前文件目錄執行的方法,說是在設置中搜索Execute In File Dir勾選爲true,但測試發現並沒有用。

1.解決方法

經過不斷的嘗試,終於找到了一些在當前目錄執行的方法:

1.0.修改launch配置

可以單獨寫在工程的.vscode目錄:

也可以把那些設置放到VS Code的setting文件裏(設置裏搜json就能看到這個文件鏈接):

1.1.os.chdir設置當前工作目錄

os.chdir可以修改當前工作目錄,只要把這句話放到import其他路徑模塊之前就行了。對於腳本文件路徑的獲取,一般可以用sys.path[0]。sys.path是python的搜索模塊的路徑集,返回的結果是一個list。此列表的第一項,path[0],在程序啓動時初始化,是包含用來調用Python解釋器的腳本的目錄。如果腳本目錄不可用(例如,如果解釋器被交互式地調用,或者腳本是從標準輸入讀取的),path[0]是空字符串,它引導Python首先在當前目錄中搜索模塊。 

#file:subsubmodule
import os,sys
#設置當前工作目錄,放再import其他路徑模塊之前
os.chdir(sys.path[0])

#導入上上級目錄
sys.path.append("../../")
#引入上上級目錄下的模塊
from submodulea.modulea import *


def func2():
    func()

if __name__=="__main__":
    func2()

可以把設置放到要執行的那個py文件。

1.2. sys.path.append添加頂層文件夾相對路徑

當我們導入一個模塊時:import  xxx,默認情況下python解析器會搜索當前目錄、已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path中。那我們在path中加入頂層文件夾的相對路徑,不就相當於可以在頂層目錄進行查找了嗎?

import os,sys
#注意默認工作目錄在頂層文件夾,這裏是相對於頂層文件夾的目錄
sys.path.append("./")

#導入上上級目錄
sys.path.append("../../")
#引入上上級目錄下的模塊
from submodulea.modulea import *

def func2():
    func()

if __name__=="__main__":
    func2()

1.3.直接在VS Code終端運行

2.Python3模塊相對路徑

Python3中模塊可以不用在目錄下寫__init__文件,如果是與文件同級的文件夾,可以直接import路徑:

#file:main.py
from 文件夾A.mymodule import *

如果需要往上級目錄跳,可以設置sys.path:

#file:main.py
import sys
#導入上上級目錄
sys.path.append("../../")
#引入上上級目錄下的模塊
from 文件夾A.mymodule import *

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章