es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Solucione el error de importación de Pylance moviendo el directorio de trabajo un nivel hacia arriba para cubrir el código importado.

Tengo esta estructura para mi proyecto:

├── Dockerfile
├── app
│   ├── __init__.py
│   ├── __pycache__
│   ├── config
│   ├── database
│   ├── logging.py
│   ├── main.py
│   ├── routers
│   ├── services
│   ├── static
│   ├── templates
│   ├── utils
│   └── worker
├── k6.js
├── poetry.lock
├── prestart.sh
├── pyproject.toml
├── pytest.ini
└── run.py

Dentro de la carpeta app, tengo una subcarpeta llamada worker que también abro como un proyecto por separado.

├── __init__.py
├── database
│   ├── __init__.py
│   └── conn.py
├── engine
│   ├── __init__.py
│   ├── core
│   ├── data
│   ├── main.py
│   └── utils
├── main.py
├── poetry.lock
├── pyproject.toml
└── run.sh

El problema que tengo cuando abro el proyecto worker, que utiliza código del directorio superior, es que pylance me da un error de una importación que no se puede resolver. Sin embargo, este código se ejecuta perfectamente.

enter image description here

Creé un archivo .vscode/settings.json para el proyecto worker y agregué estas opciones:

"python.analysis.extraPaths": ["../../app"],
"python.autoComplete.extraPaths": ["../../app"]

¡Pero aún obtengo estos errores! ¿Cómo puedo solucionar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para resolver este problema es agregar el directorio raíz de tu proyecto al sistema path. Puedes hacerlo agregando el siguiente código al inicio de tu archivo main.py en el directorio worker:

    import os
    import sys
    
    sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
    

    Este código agregará la ruta del directorio raíz de tu proyecto al sistema path, lo que debería resolver los errores de importación.

    Como alternativa, puedes agregar el mismo código en un archivo separado e importarlo en cada archivo de tu directorio worker.

    Otra solución es usar una declaración de importación relativa en tu código de worker. Por ejemplo, si deseas importar el módulo config desde el directorio app, puedes hacerlo usando una declaración de importación relativa como esta:

    from .. import config
    

    Esto importará el módulo config desde el directorio padre de tu directorio worker.

    Ten en cuenta que las declaraciones de importación relativas solo funcionan dentro de un paquete, es decir, un directorio que contiene un archivo __init__.py. En tu caso, como el directorio app es un paquete, puedes usar declaraciones de importación relativas dentro del paquete worker.

Comments are closed.