Allow statements before imports with Visual Studio Code and autopep8
Question:
I’m using Visual Studio Code with the Python plugin and autopep8 with:
"editor.formatOnSave": true
I have local packages I need to import, so I have something like:
import sys
sys.path.insert(0, '/path/to/packages')
import localpackage
but when I save, Visual Studio Code/autopep8 moves all import statements before the code, so Python can’t find my local package.
import sys
import localpackage
sys.path.insert(0, '/path/to/packages')
How can I tell Visual Studio Code/autopep8 that it’s okay to put a statement before imports, or is there a more correct way of importing local packages?
As a workaround, it looks like it’s fine if you import in an if statement:
import sys
sys.path.insert(0, '/path/to/packages')
if 'localpackage' not in sys.modules:
import localpackage
Answers:
-
Open settings
-
Search for autopep8. You should see the following results:
-
Click on "Edit in settings.json" under the first option
-
Add the following argument to the User Settings JSON file:
"python.formatting.autopep8Args": ["--ignore", "E402"]
This tells autopep8
to ignore error 402 which is: "module level import not at top of file" (here’s the list of errors in pep8)
You can use this same method to change any of the autopep8
settings. For example, if you only wanted to fix indentation, you can use "python.formatting.autopep8Args": ["--select", "E1"]
The autopep8 readme has more information on the available options.
If you don’t want to generally disable import sorting, but just disable it for specific lines, you can use the following pragmas at the end of each line:
# noqa
or
# nopep8
Like so for your example:
import sys # noqa
sys.path.insert(0, '/path/to/packages') # noqa
import localpackage
I’m using Visual Studio Code with the Python plugin and autopep8 with:
"editor.formatOnSave": true
I have local packages I need to import, so I have something like:
import sys
sys.path.insert(0, '/path/to/packages')
import localpackage
but when I save, Visual Studio Code/autopep8 moves all import statements before the code, so Python can’t find my local package.
import sys
import localpackage
sys.path.insert(0, '/path/to/packages')
How can I tell Visual Studio Code/autopep8 that it’s okay to put a statement before imports, or is there a more correct way of importing local packages?
As a workaround, it looks like it’s fine if you import in an if statement:
import sys
sys.path.insert(0, '/path/to/packages')
if 'localpackage' not in sys.modules:
import localpackage
-
Open settings
-
Search for autopep8. You should see the following results:
-
Click on "Edit in settings.json" under the first option
-
Add the following argument to the User Settings JSON file:
"python.formatting.autopep8Args": ["--ignore", "E402"]
This tells autopep8
to ignore error 402 which is: "module level import not at top of file" (here’s the list of errors in pep8)
You can use this same method to change any of the autopep8
settings. For example, if you only wanted to fix indentation, you can use "python.formatting.autopep8Args": ["--select", "E1"]
The autopep8 readme has more information on the available options.
If you don’t want to generally disable import sorting, but just disable it for specific lines, you can use the following pragmas at the end of each line:
# noqa
or
# nopep8
Like so for your example:
import sys # noqa
sys.path.insert(0, '/path/to/packages') # noqa
import localpackage