簡體   English   中英

requirements.txt - 如何標記替代包

[英]requirements.txt - How to mark alternative packages

我正在編寫一個依賴tensorflow的項目,但這可以通過兩個pip包中的任何一個提供: tensorflowtensorflow-gpu 我的項目可以正常工作,但我不希望人們在沒有gpu支持的機器上運行它來安裝額外的開銷,但我仍然希望在擁有gpu支持的機器上運行的人能夠利用它。 有沒有辦法在我的標記requirements.txt ,我需要兩個文件tensorflow tensorflow-gpu而不是兩者兼而有之?

編輯:

在這個特定的情況下,我應該注意到,從程序員的角度來看, tensorflowtensorflow-gpu都是相同的,因為它們都提供了一個模塊張量tensorflow ,它具有相同的功能/類/方法等,並且只有不同之處在於tensorflow-gpu受益於GPU加速。 我遇到的問題是,如果我在requirements.txt放入tensorflow然后為了運行GPU加速,用戶將不得不做pip install -r requirements.txt && pip uninstall tensorflow && pip install tensorflow-gpu這不是理想的,如果我把tensorflow-gpu放在requirements.txt ,那么它將需要一堆不必要的系統庫(CUDNN等),並且不會為非gpu用戶提供開箱即用的功能。

再次編輯

作為解決方法,我決定提供兩個不同的需求文件, requirements.txtrequirements-gpu.txt ,這兩個文件都包含一個共享-r .requirements-core.txt並添加各自的tensorflow版本。 這樣,想要GPU支持的人可以使用pip install -r requirements-gpu.txt但標准的pip install -r requirements.txt仍然可以為所有人提供開箱即用的功能。

您不能使用requirements.txt來限制下載包,但您可以執行以下解決方案之一:

1 - 安裝包tensorflow和tensorflow-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 - 如果tensorflow-gpu和tensorflow都在你的站點包上安裝了具有相同tensorflow名稱的包,那么我的建議是嘗試/除了我在選項號1上說的,但不包括tensorflow-gpu或tensorflow作為您的包的依賴項(將其視為“對等依賴項”,使用您的包的代碼應包含為依賴項以便使用它):

try:
  import tensorflow
except:
  raise ImportError('You need to include tensorflow or tensorflow-gpu as a dependency in order to use this package')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM