Long imports in Python
PythonCoding StylePython Problem Overview
I sometimes have to write something like
from blqblq.lqlqlqlq.bla import fobarbazbarbarbazar as foo
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
which takes more than 80 characters. This situation is not covered in the official Python coding style guide. How do I write such imports pythonically?
Python Solutions
Solution 1 - Python
http://www.python.org/dev/peps/pep-0008/#maximum-line-length
> The Python standard library is conservative and requires limiting > lines to 79 characters (and docstrings/comments to 72). > > The preferred way of wrapping long lines is by using Python's implied > line continuation inside parentheses, brackets and braces. Long lines > can be broken over multiple lines by wrapping expressions in > parentheses. These should be used in preference to using a backslash > for line continuation.
So in your case this could be:
from blqblq.lqlqlqlq.bla import (
fobarbazbarbarbazar
as foo)
from matplotlib.backends.backend_qt4agg import (
FigureCanvasQTAgg
as FigureCanvas)
Personally I always use this style which I find more readable with long lines:
# Just 1 indent
from blqblq.lqlqlqlq.bla import (
fobarbazbarbarbazar
as foo
) # end at the next line so it's always clear where what ends
from matplotlib.backends.backend_qt4agg import (
FigureCanvasQTAgg as FigureCanvas
)
Solution 2 - Python
This is the PEP8
documentation for long imports:
> Currently, if you want to import a lot of names from a module or > package, you have to choose one of several unpalatable options: > > Write a long line with backslash continuations: >
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
> Write multiple import statements: >
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
>( import * is not an option ;-) > > Instead, it should be possible to use Python's standard grouping > mechanism (parentheses) to write the import statement: >
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
>This part of the proposal had BDFL approval from the beginning. > > Parentheses support was added to Python 2.4.