vscode 在哪里存储 python 解释器设置?

问题描述 投票:0回答:4

我有两个文件夹,每个文件夹都包含一个

.vscode
文件夹,其中包含相同的
settings.json
文件。但是当我在 VS Code(在 Linux 上)和“运行而不调试”中打开它们时,其中一个运行时使用:

/bin/python3

另一个是:

~/anaconda3/bin/python

此设置存储在哪里?即 VS Code 如何知道为特定文件夹选择哪个解释器?

python visual-studio-code
4个回答
4
投票

正如已经提到的,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()

请注意,上面的脚本既不检查键是否存在,也不检查它们是否是结果中的行。为自己添加必要的检查。


3
投票

每个工作区的设置位于:

$HOME/.config/Code/User/workspaceStorage/*/state.vscdb

这是 sqlite 数据库。


2
投票

指定的 Python 解释器路径的确切位置以及如何手动更改在 https://code.visualstudio.com/docs/python/environments

中正式给出

更改使用中的python解释器的最简单方法:

  1. 打开命令面板(ctrl+shift+p)
  2. 输入Python:选择Inerterpreter
  3. 如果您想要的 python 解释器未列出,请单击“输入解释器路径”,然后单击“查找”。
  4. 选择您要使用的Python的正确二进制路径。

这样设置文件将自动更新,您不必担心它的位置。


0
投票

如果您设置了

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找到相关源代码。

© www.soinside.com 2019 - 2024. All rights reserved.