Вы можете удалить эти __future__
импорт без ущерба для функциональности, но удаление их не является необходимым и прекращает совместимость с более ранними версиями Python.
Более того, как @deceze ссылается на егокомментарий, другой импорт может отличаться.Например, from __future__ import annotations
это только включено в Python <= 4.0 через импорт, поэтому добавление / удаление этой строки повлияет на функциональность: </p>
Поскольку это изменение нарушает совместимость, новое поведение должно быть включено для каждого модуля в Python 3.7 с использованием __future__
import:
from __future__ import annotations
. Это станет значением по умолчанию вPython 4.0.
Как указывает @jmd_dk, вы можете найти эту информацию в модуле __future__
.Я написал короткий скрипт для его извлечения:
import __future__
import ast
import sys
print('Python version:', sys.version_info)
sys_t = sys.version_info[:3]
s = '__future__ import {} {} for you; the version: {} vs. your version: {}'
for name in __future__.all_feature_names:
optional, mandatory, _ = ast.literal_eval(str(getattr(__future__, name)).lstrip('_Featur'))
optional, mandatory = optional[:3], mandatory[:3]
print('\nName: {}'.format(name))
tmp = [None, None, optional, sys_t]
if optional <= sys_t:
tmp[:2] = 'is', 'included'
else:
tmp[:2] = 'not', 'included'
print(s.format(*tmp))
tmp[2] = mandatory
if mandatory <= sys_t:
tmp[:2] = 'is', 'fixed'
else:
tmp[:2] = 'not', 'fixed'
print(s.format(*tmp))
В моей системе это выдает:
Python version: sys.version_info(major=3, minor=7, micro=1, releaselevel='final', serial=0)
Name: nested_scopes
__future__ import is included for you; the version: (2, 1, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (2, 2, 0) vs. your version: (3, 7, 1)
Name: generators
__future__ import is included for you; the version: (2, 2, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (2, 3, 0) vs. your version: (3, 7, 1)
Name: division
__future__ import is included for you; the version: (2, 2, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (3, 0, 0) vs. your version: (3, 7, 1)
Name: absolute_import
__future__ import is included for you; the version: (2, 5, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (3, 0, 0) vs. your version: (3, 7, 1)
Name: with_statement
__future__ import is included for you; the version: (2, 5, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (2, 6, 0) vs. your version: (3, 7, 1)
Name: print_function
__future__ import is included for you; the version: (2, 6, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (3, 0, 0) vs. your version: (3, 7, 1)
Name: unicode_literals
__future__ import is included for you; the version: (2, 6, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (3, 0, 0) vs. your version: (3, 7, 1)
Name: barry_as_FLUFL
__future__ import is included for you; the version: (3, 1, 0) vs. your version: (3, 7, 1)
__future__ import not fixed for you; the version: (3, 9, 0) vs. your version: (3, 7, 1)
Name: generator_stop
__future__ import is included for you; the version: (3, 5, 0) vs. your version: (3, 7, 1)
__future__ import is fixed for you; the version: (3, 7, 0) vs. your version: (3, 7, 1)
Name: annotations
__future__ import is included for you; the version: (3, 7, 0) vs. your version: (3, 7, 1)
__future__ import not fixed for you; the version: (4, 0, 0) vs. your version: (3, 7, 1)
Когда Python> = 3.8 вводит __future__
импорт (пока нет ни одного, пока янапишите это), удаление этих и запуск на Python 3.7, очевидно, повлияет на функциональность.