我有两个文件夹,每个文件夹都包含一个
.vscode
文件夹,其中包含相同的 settings.json
文件。但是当我在 VS Code(在 Linux 上)和“运行而不调试”中打开它们时,其中一个运行时使用:
/bin/python3
另一个是:
~/anaconda3/bin/python
此设置存储在哪里?即 VS Code 如何知道为特定文件夹选择哪个解释器?
正如已经提到的,VS Code 将解释器存储在 sqlite 数据库中。
这通常位于
$HOME/.config/Code/User/globalStorage/state.vscdb
(或 $HOME/.config/Code/User/workspaceStorage/state.vscdb
)
信息位于表
ItemTable
中,该表有两列:key
和 value
。 key=ms-python.python
的行的值是一个 JSON 字符串,其键以 WORKSPACE_FOLDER_INTERPRETER_PATH_
(以及其他)开头,后跟工作区路径以及其值中的解释器路径。
可以使用简单的 python 脚本读取路径:
import sqlite3
import json
import pprint
connection = sqlite3.connect(
'/home/username/.config/Code/User/globalStorage/state.vscdb')
cursor = connection.cursor()
result_list = cursor.execute(
"SELECT * FROM ItemTable WHERE key='ms-python.python';").fetchall()
# we assume that there is a key 'ms-python.python'
value = result_list[0][1]
value_as_json = json.loads(value)
pprint.pprint({key: value for key, value in value_as_json.items()
if key.startswith('WORKSPACE_FOLDER_INTERPRETER_PATH_')})
如果您使用
/path/to/workspace1
和 /path/to/workspace2
使用两个不同的解释器在两条不同的路径中工作(例如 /usr/bin/python3
和 /path/to/venv/bin/python
,您将得到类似以下内容
{'WORKSPACE_FOLDER_INTERPRETER_PATH_/path/to/workspace1': '/usr/bin/python3',
'WORKSPACE_FOLDER_INTERPRETER_PATH_/path/to/workspace2': '/path/to/venv/bin/python'}
如果你想设置解释器路径,你可以执行如下操作:
workspace_folder = '/path/to/workspace'
python_interpreter = '/path/to/venv/bin/python'
key = f'WORKSPACE_FOLDER_INTERPRETER_PATH_{workspace_folder}'
connection = sqlite3.connect(
'/home/username/.config/Code/User/globalStorage/state.vscdb')
cursor = connection.cursor()
result_list = cursor.execute(
"SELECT * FROM ItemTable WHERE key='ms-python.python';").fetchall()
# we assume that there is a key 'ms-python.python'
value = result_list[0][1]
value_as_json = json.loads(value)
# we simpy set or overwrite the key without any check
value_as_json[key] = python_interpreter
new_value = json.dumps(value_as_json)
cursor.execute(
f"UPDATE ItemTable SET value='{new_value}' WHERE key='ms-python.python';")
connection.commit()
请注意,上面的脚本既不检查键是否存在,也不检查它们是否是结果中的行。为自己添加必要的检查。
每个工作区的设置位于:
$HOME/.config/Code/User/workspaceStorage/*/state.vscdb
这是 sqlite 数据库。
指定的 Python 解释器路径的确切位置以及如何手动更改在 https://code.visualstudio.com/docs/python/environments
中正式给出更改使用中的python解释器的最简单方法:
这样设置文件将自动更新,您不必担心它的位置。
如果您设置了
python.defaultInterpreterPath
设置,则将使用该设置。请注意,曾经有另一个类似的设置称为 python.pythonPath
,现在已不存在(另请参阅此问题单评论)。
如果您通过 UI 而不是通过设置选择了解释器,那么它不会存储在设置中(请参阅相关博文。您从 UI used 中进行的选择将存储在
python.pythonpath
设置中) 。它存储在内部工作区存储中。支持机制是globalState
(请参阅扩展数据存储API文档)。因此,您将在用户数据目录下查找(默认用户数据目录是默认设置文件位置的目录的上一级),位于./User/globalStorage/state.vscdb
(用于全局存储)。在全局存储下,ms-python.python
键的对应值包含JSON数据,以及选定解释器路径(分别为WORKSPACE_INTERPRETER_PATH_${...}
和WORKSPACE_FOLDER_INTERPRETER_PATH_${...}
)的多根和非多根工作空间映射的映射。您可以使用 SQLiteBrowser 之类的工具来读取和编辑此数据库文件。
您可以在https://github.com/microsoft/vscode-python/blob/main/src/client/common/interpreterPathService.ts找到相关源代码。