根据另一个模块是否存在为模块使用多个别名
Use multiple aliases for a module depending on whether another module exists or not
我目前正在做一些涉及 cupy
的工作。总的来说,它使我的代码 运行 更快,因为它 运行 将我的 GPU 上的所有内容都连接起来。现在,如果用户没有安装 cupy
,但他确实安装了 numpy
,我想进行必要的调整。目前,我正在导入它们:import numpy as np; import cupy as cp
。我可以检查讨论的 here 来测试是否未安装 cupy
,所以这不是问题。但我不想在任何地方都放置条件或将 cp
更改为 np
,因为如果 cupy
确实已安装并且我想改用它,那会使事情复杂化。因此,我测试了以下内容(理论上可以解决我的问题):
import numpy as np
import numpy as cp
a = np.zeros((3, 3))
b = cp.zeros((3, 3))
>>> print(type(a))
<class 'numpy.ndarray'>
>>> print(type(b))
<class 'numpy.ndarray'>
它似乎有效。尽管如此,我还是发现了这个 (or ),其中人们指出导入的多个别名是个坏主意,但我没有找到任何详细说明为什么会这样。
有人可以详细说明这个主题并说明在处理模块 (cupy
) 的使用时如何解决这个问题,如果没有安装,别名应该指向另一个 (numpy
)?
要为 numpy 导入设置另一个别名,为什么不分配它呢?
import numpy as np
cp = np
# then just use it normally,
x = cp.arange(10)
我目前正在做一些涉及 cupy
的工作。总的来说,它使我的代码 运行 更快,因为它 运行 将我的 GPU 上的所有内容都连接起来。现在,如果用户没有安装 cupy
,但他确实安装了 numpy
,我想进行必要的调整。目前,我正在导入它们:import numpy as np; import cupy as cp
。我可以检查讨论的 here 来测试是否未安装 cupy
,所以这不是问题。但我不想在任何地方都放置条件或将 cp
更改为 np
,因为如果 cupy
确实已安装并且我想改用它,那会使事情复杂化。因此,我测试了以下内容(理论上可以解决我的问题):
import numpy as np
import numpy as cp
a = np.zeros((3, 3))
b = cp.zeros((3, 3))
>>> print(type(a))
<class 'numpy.ndarray'>
>>> print(type(b))
<class 'numpy.ndarray'>
它似乎有效。尽管如此,我还是发现了这个
有人可以详细说明这个主题并说明在处理模块 (cupy
) 的使用时如何解决这个问题,如果没有安装,别名应该指向另一个 (numpy
)?
要为 numpy 导入设置另一个别名,为什么不分配它呢?
import numpy as np
cp = np
# then just use it normally,
x = cp.arange(10)