diff --git a/setup.py b/setup.py
index 59cff8d..ca72927 100644
--- a/setup.py
+++ b/setup.py
@@ -199,31 +199,36 @@
         'sdist',
         'upload',
     )
+
     def is_short_option(argument):
         """Check whether a command line argument is a short option."""
         return len(argument) >= 2 and argument[0] == '-' and argument[1] != '-'
+
     def expand_short_options(argument):
         """Expand combined short options into canonical short options."""
         return ('-' + char for char in argument[1:])
+
     def argument_without_setup_requirements(argv, i):
         """Check whether a command line argument needs setup requirements."""
         if argv[i] in no_setup_requires_arguments:
             # Simple case: An argument which is either an option or a command
             # which doesn't need setup requirements.
             return True
-        elif is_short_option(argv[i]) and all(option in
-                no_setup_requires_arguments for option in
-                expand_short_options(argv[i])):
+        elif (is_short_option(argv[i]) and
+              all(option in no_setup_requires_arguments
+                  for option in expand_short_options(argv[i]))):
             # Not so simple case: Combined short options none of which need
             # setup requirements.
             return True
-        elif argv[i - 1 : i] == ['--egg-base']:
+        elif argv[i - 1:i] == ['--egg-base']:
             # Tricky case: --egg-info takes an argument which should not make
             # us use setup_requires (defeating the purpose of this code).
             return True
         else:
             return False
-    if all(argument_without_setup_requirements(argv, i) for i in range(1, len(argv))):
+
+    if all(argument_without_setup_requirements(argv, i)
+           for i in range(1, len(argv))):
         return {
             "cmdclass": {
                 "build": DummyCFFIBuild,
