根据另一个模块是否存在为模块使用多个别名

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)