[英]requirements.txt - How to mark alternative packages
我正在編寫一個依賴tensorflow
的項目,但這可以通過兩個pip
包中的任何一個提供: tensorflow
或tensorflow-gpu
。 我的項目可以正常工作,但我不希望人們在沒有gpu支持的機器上運行它來安裝額外的開銷,但我仍然希望在擁有gpu支持的機器上運行的人能夠利用它。 有沒有辦法在我的標記requirements.txt
,我需要兩個文件tensorflow
或 tensorflow-gpu
而不是兩者兼而有之?
編輯:
在這個特定的情況下,我應該注意到,從程序員的角度來看, tensorflow
和tensorflow-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.txt
和requirements-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.