如何在带有包管理器 conda 的 venv 中使用 VSCode 测试 Python 交互式笔记本(= Jupyter Notebook、iPython)中的 postgreSQL SQL 表达式?

如何在带有包管理器 conda 的 venv 中使用 VSCode 测试 Python 交互式笔记本(= Jupyter Notebook、iPython)中的 postgreSQL SQL 表达式?

如何在带有包管理器 conda 的 venv 中使用 VSCode 测试 Python 交互式笔记本(= Jupyter Notebook、iPython)中的 postgreSQL SQL 表达式?

答案1

分享这个,因为我花了太长时间根据分散的指南和提示来完成这个设置。


  • 切换到您选择的 conda 环境。例如,创建一个名为的虚拟环境venv310(整个答案中的名称相同)conda create -n venv310 python=3.10并使用以下方式激活它:conda activate venv310

如果我从已激活 venv310 的终端打开 VSCode,则只要我使用以下命令运行代码,VSCode 就会立即返回到基本环境Shift+Enter

(base) … $ /bin/python3
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy import create_engine

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sqlalchemy'
  • 如果没有venv310在这里工作时,从这个错误中已经可以清楚地看出,错误获取的基础环境需要 sqlalchemy 模块,因此我们需要在venv310
conda install sqlalchemy
  • 从后来的错误来看,您还需要安装方言“psycopg2”:
    raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres.psycopg2
conda install psycopg2
  • 如果你运行像'%load_ext sql'这样的魔法,你会看到:
>>> %load_ext sql
  File "<stdin>", line 1
    %load_ext sql
    ^
SyntaxError: invalid syntax
  • 无论如何,主要问题是虚拟环境不起作用。因此,安装 VSCode/VSCodium 扩展“Python for VSCode”。请参阅在 VsCode 中激活 Anaconda 环境
  • 重新启动 VSCode。
  • 点击是的如果你看到这个:

在此处输入图片描述

我们注意到您正在使用 conda 环境。如果您在集成终端中遇到此环境的问题,我们建议您让 Python 扩展在用户设置中将“terminal.integrated.inheritEnv”更改为 false。

来源:Python(扩展) 是 否 更多信息

  • Ctrl+Shift+P→ “Python:选择解释器”→选择venv310(这是我之前已经可以做的,但是现在,当运行某些代码时,它不会回退到基本环境)。参见在 VsCode 中激活 Anaconda 环境_vsCode_帮酷编程问答

  • 使用以下方式打开交互式窗口Ctrl+Shift+P→“Jupyter:创建交互窗口”

在此处输入图片描述

我只需在普通 Python 代码编辑器中右键单击该%load_ext sql行即可启动交互式窗口。或者按Shift+Enter在那一行。

如何在 Visual Studio Code 中查找/执行 Python 交互模式? - 问答 - 云+社区 - 腾讯云

然后显示:

在此处输入图片描述

使用“Python 3.10.6 ('venv310')”运行单元需要 ipykernel 包。

点击安装

  • 不确定,但我想我点击了安装,并且它仍然显示在 iPython 历史记录中:

在此处输入图片描述

使用“Python 3.10.6 ('venv310')”运行单元需要 ipykernel 包。
运行以下命令将“ipykernel”安装到 Python 环境中。
命令:“conda install -n venv310 ipykernel --update-deps --force-reinstall”

# %% Python 3.10.8 (main,2022 年 11 月 24 日,14:13:03) [GCC 11.2.0]
输入“copyright”、“credits”或“license”获取更多信息
IPython 8.7.0——增强的交互式 Python。输入“?”获取帮助。

因此,如果你也看到这个,请conda install -n venv310 ipykernel --update-deps --force-reinstall运行venv310

  • 在 iPython 终端中运行%load_ext sql,可以在终端中输入,也可以从 Python 编辑器运行 magic(检查右键单击以查看如何在交互式窗口中运行)。

在此处输入图片描述

在此处输入图片描述

如果你看到:

在此处输入图片描述

Output exceeds the size limit. Open the full output data in a text editor
---------------------------------------------------------------------------
ModuleNotFoundError                     Traceback (most recent call last)
Cell In[2], line 1
----> 1 get_ipython().run_line_magic('load_ext', 'sql')

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/interactiveshell.py:2364, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2362     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2363 with self.builtin_trap:
-> 2364     result = fn(*args, **kwargs)
   2365 return result

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/magics/extension.py:33, in ExtensionMagics.load_ext(self, module_str)
    31 if not module_str:
    32  raise UsageError('Missing module name.')
---> 33 res = self.shell.extension_manager.load_extension(module_str)
    35 if res == 'already loaded':
    36  print("The %s extension is already loaded. To reload it, use:" % module_str)

File ~/anaconda3/envs/venv310/lib/python3.10/site-packages/IPython/core/extensions.py:76, in ExtensionManager.load_extension(self, module_str)
    69 """Load an IPython extension by its module name.
    70
    71 Returns the string "already loaded" if the extension is already loaded,
    72 "no load function" if the module doesn't have a load_ipython_extension
    73 function, or None if it succeeded.
    74 """
...
File <frozen importlib._bootstrap>:1027, in _find_and_load(name, import_)

File <frozen importlib._bootstrap>:1004, in _find_and_load_unlocked(name, import_)

ModuleNotFoundError: No module named 'sql'

或者如果你运行以下魔法并看到其中之一:

# %%
%sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db
UsageError: Line magic function `%sql` not found.

# %%
%%sql select * FROM x;
UsageError: Cell magic `%%sql` not found.

# %%
result = %sql select * FROM x;
UsageError: Line magic function `%sql` not found.

然后你需要运行venv310

conda install -c conda-forge ipython-sql

(而不是pipenv install ipython-sql像在ipython-sql 指南

UsageError:%sql未找到行魔法函数 - VoidCC VoidCC

  • 回到 VSCode,你可能会看到:

在此处输入图片描述

但这并无害。

  • 再次运行:
%load_ext sql

在此处输入图片描述

  • 然后:%sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db

在此处输入图片描述

(看:PostgreSQL 连接字符串/URL 的格式是什么? - 问答 - 云+社区 - 腾讯云

  • 现在,你可以在 iPython 控制台中看到 SQL 输出:
%sql select * FROM x;

在此处输入图片描述

随后输出。有关显示限制,请参阅ipython-sql 指南--> “配置”。

相关内容