-
-
Save tossmilestone/23139d870841a3d5cba2aea28da1a895 to your computer and use it in GitHub Desktop.
| How to manually setup flake8 as PyCharm external tool | |
| File / Settings / Tools / External Tools / Add | |
| Name: Flake8 | |
| Program: $PyInterpreterDirectory$/python | |
| Parameters: -m flake8 --max-complexity 10 --ignore E501 $FilePath$ | |
| Working directory: $ProjectFileDir$ | |
| Output Filters / Add | |
| Name: Filter 1 | |
| Regular expression to match output: | |
| $FILE_PATH$\:$LINE$\:$COLUMN$\:.* | |
| Output Filters / Add | |
| Name: Filter 2 | |
| Regular expression to match output: | |
| $FILE_PATH$\:$LINE$\:.* | |
| To check source with flake8: | |
| Tools / External Tools / Flake8 | |
| Can be used with single files as well as with directories, recursively. |
not work, errors: permission denied.
thx, it working
Ty! Output filters work great with pylint too; see https://www.jetbrains.com/help/pycharm/configuring-third-party-tools.html#pylint-configure
Using this config with file watcher:
Can flake8 be configured to run automatically in pycharm?
How can I use a flake8 config file (setup.cfg) together with the external tooling?
How can I use a flake8 config file (setup.cfg) together with the external tooling?
@patrickwerz
I think you can add the setup.cfg to the Parameters:
Parameters: -m flake8 --max-complexity 10 --ignore E501 $FilePath$
and use the $ProjectFileDir$ to locate your setup.cfg.
Thank's a lot, really helpful info! 👍
thanks for helps!!
Created a small repo for pycharm external tools (currently flake8 and black supported ) for applying to a code selection from pycharm.
Maybe this will be somewhat helpful to anyone: https://github.com/haim0n/pycharm_ext_tools
Thank you, @haim0n!
Thank you, worked like a charm!
Cheers , glad to help :)
Just bear in mind that flake8 deprecated the support for --diff option in its next versions: https://flake8.pycqa.org/en/latest/release-notes/5.0.0.html#deprecations
This was useful but it should be noted that it only logs the Flake8 output in the terminal. This library worked well for me to integrate the output into Pycharm's Pylint plugin.
Hey there, I managed to configure WSP using LSP4IJ in PyCharm and good old pipx. I assume you have pipx.
Here's how
1 Install python-lsp-server
# Install pylsp
pipx install "python-lsp-server[flake8]"
# Inject required plugins
pipx inject python-lsp-server wemake-python-styleguide
pipx inject python-lsp-server pyls-flake8Important: The
[flake8]extra does NOT install the flake8 plugin — you must manually injectpyls-flake8.
2 Verify Installation.
pipx runpip python-lsp-server list
# or
pipx runpip python-lsp-server list | grep -E "(flake8|wemake|pyls-flake8|Flake8-pyproject)"Expected output:
flake8 7.x.x
pyls-flake8 0.x.x
wemake-python-styleguide 1.x.x
3 Find pylsp Executable Path
where pylspNote the path: C:\Users\Day\.local\bin\pylsp.exe
4 Create LSP server
- Settings → Languages & Frameworks → Language Server Protocol → Server Definitions
- Click "+" to add a new server
- Configure:
| Field | Value |
|---|---|
| Name | pylsp-flake8 |
| Path | C:\Users\Day\.local\bin\pylsp.exe |
- In the Configuration tab, add this JSON:
{
"pylsp": {
"plugins": {
"flake8": {
"enabled": true,
"maxLineLength": 70,
"select": ["WPS", "E"],
"ignore": ["WPS111", "WPS602"]
},
"pycodestyle": {
"enabled": false
},
"pyflakes": {
"enabled": false
}
}
}
}or
{
"pylsp": {
"plugins": {
"flake8": {
"enabled": true,
"config": "C:\\...whatever...\\.flake8"
},
"pycodestyle": { "enabled": false },
"pyflakes": { "enabled": false },
"mccabe": { "enabled": false },
"pyls_isort": { "enabled": false },
"pylsp_mypy": { "enabled": false },
"rope_autoimport": { "enabled": false },
"rope_completion": { "enabled": false }
}
}
}-
In Mappings - Language - Languages add the Python language.
-
Click OK
5 Restart PyCharm
Restart PyCharm completely for the LSP server to initialize.
6 Test Inline Errors
Create a test file with intentional WPS errors:
# test_wps_errors.py
"""Test file with WPS errors."""
# WPS407: Mutable module constant
ITEMS_LIST = []
# WPS110: Wrong variable name
data = {"key": "value"}
obj = object()
def process(x):
# WPS421: Wrong function call (print)
print("Processing...")
# WPS432: Magic number
return x * 3.14159- WPS errors appear as inline squiggles (yellow/orange underlines)
- Hovering shows the WPS error message
thanks, it helps