needs.txt - Как пометить альтернативные пакеты - PullRequest
0 голосов
/ 05 июня 2018

Я пишу проект, основанный на tensorflow, но который может быть предоставлен одним из двух pip пакетов: tensorflow или tensorflow-gpu.Мой проект отлично работает с любым из них, но я не хочу, чтобы люди, работающие на нем без поддержки gpu, устанавливали дополнительные издержки, но я все же хочу, чтобы люди, работающие на машинах с поддержкой gpu, могли использовать это.Есть ли способ отметить в моем файле requirements.txt, что мне нужно либо tensorflow или tensorflow-gpu, но не оба?

РЕДАКТИРОВАТЬ:

В этом конкретном случае следует отметить, что с точки зрения программиста оба tensorflow и tensorflow-gpu идентичны, так как оба обеспечивают модуль tensorflowкоторый имеет те же функции / классы / методы и т. д. и отличается только тем, что tensorflow-gpu выигрывает от ускорения графического процессора.Проблема, с которой я сталкиваюсь, заключается в том, что если я добавлю tensorflow в requirements.txt, то для запуска с ускорением GPU пользователи должны будут сделать pip install -r requirements.txt && pip uninstall tensorflow && pip install tensorflow-gpu, что не идеально, и если я вместо этого введу tensorflow-gpu в requirements.txt, тогда потребуется куча ненужных системных библиотек (CUDNN и т. Д.), И они не будут работать "из коробки" для пользователей, не использующих GPU.

ИЗМЕНИТЬ СНОВА

В качестве обходного пути я решил предоставить два разных файла требований, requirements.txt и requirements-gpu.txt, каждый из которых включает в себя общий -r .requirements-core.txt и добавить соответствующую им версию tenorflow.Таким образом, люди, которым нужна поддержка графических процессоров, могут pip install -r requirements-gpu.txt, но стандарт pip install -r requirements.txt все равно будет работать "из коробки" для всех.

1 Ответ

0 голосов
/ 06 июня 2018

Вы не можете обусловить загрузку пакетов с помощью requirements.txt, но вы можете сделать одно из следующих решений:

1 - установить оба пакета tenensflow и tenorflow-gpu в качестве зависимостей и сделать попытку / исключение, чтобы выбрать какойпакет будет фактически использоваться, например:

tensorflow = null

try:
  tensorflow = __import__("tensorflow-gpu")
  tensorflow.operation_that_requires_gpu()
except:
  tensorflow = __import__("tensorflow")
enter code here

2 - В вашем проекте вы просите клиента передать зависимость напрямую вам:

def my_function_that_uses_tensorflow(tensorflow):
  # do stuff

from my_module import my_function_that_uses_tensorflow
import tensorflow # or tensorflow = __import__("tensorflow-gpu")
my_function_that_uses_tensorflow(tensorflow)

3 - Если тензор-gpu иТензорный поток оба устанавливают свой пакет с тем же именем tensorflow на ваши пакеты сайтов, тогда я предлагаю сделать попытку / за исключением того, что я сказал в варианте № 1, но не включайте в него зависимость tenorflow-gpu или tenorflow в качестве зависимости вашегопакет (трактуйте его как «зависимость от равноправных узлов», которую код, использующий ваш пакет, должен включать в качестве своей зависимости для использования):

try:
  import tensorflow
except:
  raise ImportError('You need to include tensorflow or tensorflow-gpu as a dependency in order to use this package')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...