%20en%20un%20venv%20con%20el%20administrador%20de%20paquetes%20conda%3F.png)
¿Cómo probar en VSCode una expresión SQL postgreSQL en el cuaderno interactivo de Python (= Jupyter Notebook, iPython) en un venv con el administrador de paquetes conda?
Respuesta1
Comparto esto ya que me tomó demasiado tiempo configurarlo a partir de las guías y sugerencias dispersas.
- Cambie a un entorno conda de su elección. Por ejemplo, cree un entorno virtual llamadovenv310(mismo nombre en toda la respuesta) con
conda create -n venv310 python=3.10
y actívalo con:conda activate venv310
.
Si abro VSCode desde una terminal que ha activado venv310, VSCode vuelve al entorno base tan pronto como ejecuto el código conMayús+Entrar:
(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'
- Sin tener elvenv310En el trabajo aquí, ya está claro a partir de este error que el entorno base tomado por error necesitaría el módulo sqlalchemy, por lo que necesitamos instalarlo en elvenv310:
conda install sqlalchemy
- Y de un error posterior resulta que también necesitas instalar el dialecto "psycopg2":
raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres.psycopg2
conda install psycopg2
- Si ejecuta magia como '%load_ext sql', verá:
>>> %load_ext sql
File "<stdin>", line 1
%load_ext sql
^
SyntaxError: invalid syntax
- De todos modos, el principal problema es que el entorno virtual no funciona. Por lo tanto, instale la extensión VSCode/VSCodium "Python para VSCode". VerActivando el entorno Anaconda en VsCode.
- Reinicie VSCode.
- Hacer clicSísi ves esto:
Notamos que estás usando un entorno conda. Si tiene problemas con este entorno en la terminal integrada, le recomendamos que permita que la extensión de Python cambie "terminal.integrated.inheritEnv" a falso en su configuración de usuario.
Fuente: Python (Extensión) Sí No Más información
PrensaCtrl+Mayús+P→ "Python: Seleccionar intérprete" → elegirvenv310(Esto es lo que ya podía hacer antes, pero ahora, al ejecutar algún código, no volvía al entorno base). VerActivando el entorno Anaconda en VsCode.
Abra la ventana interactiva conCtrl+Mayús+P→ "Jupyter: crear ventana interactiva"
Inicié la ventana interactiva simplemente con un clic derecho en la %load_ext sql
línea que tenía en el editor de código Python normal. O presionasMayús+Entraren esa línea.
Luego muestra:
La ejecución de celdas con 'Python 3.10.6 ('venv310')' requiere el paquete ipykernel.
Hacer clicInstalar.
- No estoy seguro, pero creo que hice clic.Instalar, y todavía se muestra en el historial de iPython:
La ejecución de celdas con 'Python 3.10.6 ('venv310')' requiere el paquete ipykernel.
Ejecute el siguiente comando para instalar 'ipykernel' en el entorno Python.
Comando: 'conda install -n venv310 ipykernel --update-deps --force-reinstall'# %% Python 3.10.8 (principal, 24 de noviembre de 2022, 14:13:03) [GCC 11.2.0]
Escriba 'copyright', 'créditos' o 'licencia' para obtener más información
IPython 8.7.0: un interactivo mejorado Pitón. Tipo '?' por ayuda.
Por lo tanto, si ve esto también, ejecute conda install -n venv310 ipykernel --update-deps --force-reinstall
en elvenv310.
- Ejecute
%load_ext sql
en la terminal iPython, ya sea escribiéndolo en la terminal o ejecutando la magia desde el editor de Python (haga clic con el botón derecho para ver cómo ejecutar en la ventana interactiva).
Si tú ves:
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'
o si ejecutas la siguiente magia y ves uno de estos:
# %%
%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.
entonces necesitas correr en elvenv310:
conda install -c conda-forge ipython-sql
(y no el instalador de pip pipenv install ipython-sql
como está escrito en elguía ipython-sql)
VerUsageError: función mágica de línea %sql
no encontrada
- De vuelta en VSCode, es posible que veas:
Pero eso no hace daño.
- Corre de nuevo:
%load_ext sql
- Y luego: %sql postgresql+psycopg2://localhost/&server=postgres?user=postgres&port=5432&password=postgres&database=test_db
(Ver:¿Cuál es el formato de la cadena/URL de conexión de PostgreSQL? - Desbordamiento de pila)
- Y ahora puedes ver la salida de SQL en la consola de iPython:
%sql select * FROM x;
con la salida posterior. Para conocer el límite de visualización, consulte laguía ipython-sql--> "Configuración".