Я хотел бы знать, возможно ли параметризовать способ импорта модулем одного из его собственных модулей.
Моя проблема заключается в следующем. У меня есть несколько обобщенных функций тензорного потока c, таких как потери, которые работают с обеими версиями API (1 и 2).
Если модуль используется с TF2 или со старой версией TF1, тензорный поток должен быть импортирован как
import tensorflow as tf
Однако, если я использую TF 1.15 или если я хочу использовать версию 1 API с TF2, тензорный поток должен быть импортирован как
import tensorflow.compat.v1 as tf
tf.disable_v1_behavior()
Таким образом, способ выполнения импорта не может быть автоматически выведен из версии TF, поскольку TF2 можно использовать в режиме «совместимости» TF1.
Есть ли способ изменить способ импорта сделано в модуле?
Хак, который, кажется, работает для модулей, которые импортируются напрямую:
import my_module
my_module.tf = tf
Это заставляет модуль tf
быть таким же, как текущий. Однако
Это может иметь невидимые и трудно отслеживаемые побочные эффекты, поскольку тензор потока импортируется с потенциально различными требованиями API, это может испортить любые настройки глобальных переменных.
Это работает для модулей, импортируемых напрямую, а не для модулей, импортируемых другими модулями, если хак не распространяется на все модули.