[英]Python best practice for when an module is not always available
我有一個在 cuda 上運行的 Python 代碼。 現在我需要支持無法運行 cuda 的新部署設備,因為它們沒有 Nvidia GPU。 由於我在代碼中有很多cupy
導入,我想知道這種情況的最佳實踐是什么。
例如,我可能必須根據 cuda 的可用性導入某些類。 這看起來很惡心。 我可以遵循任何好的編程模式嗎?
例如,我最終會做這樣的事情:
from my_custom_autoinit import is_cupy_available
if is_cupy_available:
import my_module_that_uses_cupy
其中my_custom_autoinit.py
是:
try:
import cupy as cp
is_cupy_available = True
except ModuleNotFoundError:
is_cupy_available = False
這帶來了一個令人討厭的缺點:每次我想使用my_module_that_uses_cupy
時,我都需要檢查cupy
是否可用。 我個人不喜歡這個,我猜有人想出了比這更好的東西。 謝謝
您可以在項目中添加一個名為cupywrapper
的模塊,其中包含您的try..except
Cupywrapper.py
try:
import cupy as cp
is_cupy_available = True
except ModuleNotFoundError:
import numpy as cp
is_cupy_available = False
我假設您可以用numpy
代替cupy
,因為來自網站:
CuPy的接口與NumPy高度兼容; 在大多數情況下,它可以用作替代品。 您只需在 Python 代碼中用 cupy 替換 numpy 即可。
然后,在您的代碼中,您將執行以下操作:
import cupywrapper
cp = cupywrapper.cp
# Now cp is either cupy or numpy
x = [1, 2, 3]
y = [4, 5, 6]
z = cp.dot(x, y)
print(z)
print("cupy? ", cupywrapper.is_cupy_available)
在我的電腦上,我沒有安裝cupy
,這回落到numpy.dot
,給出 output
32
cupy? False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.