[tool.poetry.scripts] post-install = "scripts:notify_vscode" And a simple Python script that touches .vscode/settings.json to force a reload. You might see advice online: "Just install the package globally." Never do this. It pollutes your system Python and defeats the purpose of Poetry.
Introduction: The Perfect Storm of Modern Python Development You’ve embraced modern Python development. You use Poetry for dependency management and virtual environments because you’re tired of the requirements.txt chaos. You use VS Code with Pylance because you want blazing-fast type checking and autocompletion. pylance missing imports poetry hot
This article is the definitive guide to understanding why this happens and, more importantly, how to fix it permanently. Before typing random commands, it’s crucial to understand why this breakage occurs. Pylance is a static type checker. It needs to know the exact Python interpreter and site-packages path to validate your imports. Poetry, by default, is "non-intrusive." It creates virtual environments in a cache directory (e.g., ~/Library/Caches/pypoetry/virtualenvs/ on macOS or %APPDATA%\pypoetry\virtualenvs on Windows). Introduction: The Perfect Storm of Modern Python Development
[tool.poetry] name = "myproject" packages = [{include = "myproject", from = "src"}] Then, update your settings.json as shown above with python.analysis.extraPaths . If you have a client/ and server/ folder, each with its own poetry.lock : This article is the definitive guide to understanding
If you don’t see the Poetry environment at all, click Enter interpreter path and manually paste the result of this command:
Now, look in your project folder. You will see a .venv directory. VS Code and Pylance will auto-detect it without any manual intervention. To make it bulletproof, create a workspace setting. In your project root, create a .vscode folder, then a settings.json file:
PYTHONPATH=${workspaceFolder}/src VS Code's Python extension automatically loads .env files. Add a script in your pyproject.toml to remind or automate: