Как изменить способ импорта модуля одним из своих модулей? - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы знать, возможно ли параметризовать способ импорта модулем одного из его собственных модулей.

Моя проблема заключается в следующем. У меня есть несколько обобщенных функций тензорного потока 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 быть таким же, как текущий. Однако

  1. Это может иметь невидимые и трудно отслеживаемые побочные эффекты, поскольку тензор потока импортируется с потенциально различными требованиями API, это может испортить любые настройки глобальных переменных.

  2. Это работает для модулей, импортируемых напрямую, а не для модулей, импортируемых другими модулями, если хак не распространяется на все модули.

1 Ответ

0 голосов
/ 17 апреля 2020

Я использую, как в { ссылка }:

>>> import pkg_resources
>>> pkg_resources.get_distribution("tensorflow").version
'XX.XX'

Еще одна идея - grep:

$ pip freeze | grep tensorflow
tensorflow==XX.XX

Вы используете pip или conda? Это также может предложить несколько различных опций, основанных на выводе conda list или около того ..

Исходя из этого, вы можете использовать один или другой импорт ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...