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.
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?
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 directorioworker
: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óduloconfig
desde el directorioapp
, puedes hacerlo usando una declaración de importación relativa como esta:Esto importará el módulo
config
desde el directorio padre de tu directorioworker
.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 directorioapp
es un paquete, puedes usar declaraciones de importación relativas dentro del paqueteworker
.