Package: python-lsp-server
Python LSP ServerA Python 3.8+ implementation of theLanguage Server Protocol.
(Note: versions <1.4 should still work with Python 3.6)InstallationThe base language server requiresJedito provide Completions, Definitions, Hover, References, Signature Help, and Symbols:pip install python-lsp-serverThis will expose the commandpylspon your PATH. Confirm that installation succeeded by runningpylsp --help.If the respective dependencies are found, the following optional providers will be enabled:Ropefor Completions and renamingPyflakeslinter to detect various errorsMcCabelinter for complexity checkingpycodestylelinter for style checkingpydocstylelinter for docstring style checking (disabled by default)autopep8for code formattingYAPFfor code formatting (preferred over autopep8)flake8for error checking (disabled by default)pylintfor code linting (disabled by default)Optional providers can be installed using theextrassyntax. To installYAPFformatting for example:pip install "python-lsp-server[yapf]"All optional providers can be installed using:pip install "python-lsp-server[all]"If you get an error similar to'install_requires' must be a string or list of stringsthen please upgrade setuptools before trying again.pip install -U setuptoolsWindows and Linux installationIf you use Anaconda/Miniconda, you can installpython-lsp-serverusing this conda commandconda install -c conda-forge python-lsp-serverPython-lsp-server is available in the repos of every major Linux distribution, and it is usually calledpython-lsp-serverorpython3-pylsp.For example, here is how to install it in Debian and Debian-based distributions (E.g. Ubuntu, Pop!_OS, Linux Mint)sudo apt-get install python3-pylspor Fedora Linuxsudo dnf install python-lsp-serveror Arch Linuxsudo pacman -S python-lsp-serverOnly on Alpine Linux the package is named differently. You can install it there by typing this command in your terminal:apk add py3-lsp-server3rd Party PluginsInstalling these plugins will add extra functionality to the language server:pylsp-mypy:MyPytype checking for Python >=3.8.pyls-isort: code formatting usingisort(automatic import sorting).python-lsp-black: code formatting usingBlack.pyls-memestra: detecting the use of deprecated APIs.pylsp-rope: Extended refactoring capabilities usingRope.python-lsp-ruff: Extensive and fast linting usingruff.Please see the above repositories for examples on how to write plugins for the Python LSP Server.cookiecutter-pylsp-pluginis acookiecuttertemplate for setting up a basic plugin project for python-lsp-server. It documents all the essentials you need to know to kick start your own plugin project.Please file an issue if you require assistance writing a plugin.ConfigurationLike all language servers, configuration can be passed from the client that talks to this server (i.e. your editor/IDE or other tool that has the same purpose). The details of how this is done depend on the editor or plugin that you are using to communicate withpython-lsp-server. The configuration options available at that level are documented inCONFIGURATION.md.python-lsp-serverdepends on other tools, like flake8 and pycodestyle. These tools can be configured via settings passed from the client (as above), or alternatively from other configuration sources. The following sources are available:pycodestyle: discovered in~/.config/pycodestyle,setup.cfg,tox.iniandpycodestyle.cfg.flake8: discovered in~/.config/flake8,.flake8,setup.cfgandtox.iniThe default configuration sources arepycodestyleandpyflakes. If you would like to useflake8, you will need to:Disablepycodestyle,mccabe, andpyflakes, by setting their correspondingenabledconfigurations, e.g.pylsp.plugins.pycodestyle.enabled, tofalse. This will prevent duplicate linting messages as flake8 includes these tools.Setpylsp.plugins.flake8.enabledtotrue.Change thepylsp.configurationSourcessetting (in the value passed in from your client) to['flake8']in order to use the flake8 configuration instead.The configuration options available in these config files (setup.cfgetc) are documented in the relevant tools:flake8 configurationpycodestyle configurationOverall configuration is computed first from user configuration (in home directory), overridden by configuration passed in by the language client, and then overridden by configuration discovered in the workspace.As an example, to change the list of errors that pycodestyle will ignore, assuming you are using thepycodestyleconfiguration source (the default), you can:Add the following to your ~/.config/pycodestyle:[pycodestyle]
ignore = E226,E302,E41Set thepylsp.plugins.pycodestyle.ignoreconfig value from your editorSame as 1, but add tosetup.cfgfile in the root of the project.Python LSP Server can communicate over WebSockets when configured as follows:pylsp --ws --port [port]The following libraries are required for Web Sockets support:websocketsfor Python LSP Server Web sockets using websockets library. referWebsockets installationfor more detailsYou can install this dependency with command below:pip install 'python-lsp-server[websockets]'LSP Server FeaturesAuto CompletionAutoimportCode LintingCode actionsSignature HelpGo to definitionHoverFind ReferencesDocument SymbolsDocument FormattingCode foldingMultiple workspacesDevelopmentDev install# (optional) create conda env
conda create --name python-lsp-server python=3.11 -y
conda activate python-lsp-server

pip install -e ".[all,websockets,test]"Run server with wspylsp --ws -v  # Info level logging
pylsp --ws -vv # Debug level loggingTo run the test suite:# requires: pip install ".[test]" (see above)pytestRunning ruff as a linter and code formatter on the repo:ruffcheck.# linterruffcheck--fix.# fix all auto-fixable lint issuesruffformat.# format the documentAfter adding configuration options toschema.json, refresh theCONFIGURATION.mdfile withpython scripts/jsonschema2md.py pylsp/config/schema.json CONFIGURATION.mdLicenseThis project is made available under the MIT License.