我想在我的代码中使用scipy.spatial.distance.cosine
。如果我执行类似import scipy.spatial
或from scipy import spatial
的操作,我可以导入spatial
子模块,但如果我只是使用import scipy
调用scipy.spatial.distance.cosine(...)
,则会导致以下错误:AttributeError: 'module' object has no attribute 'spatial'
.
第二种方法有什么问题?
4条答案
按热度按时间fv2wmkja1#
导入包不会自动导入子模块。您需要显式导入子模块。
例如,
import xml
不导入子模块xml.dom
有一个例外,比如
os.path
。(os
模块本身将子模块导入到它的命名空间中)gudnpqoy2#
这是因为scipy是一个 package,而不是一个模块,当你导入一个包时,你实际上并没有加载里面的模块,因此
package.module
会导致一个错误。但是,
import package.module
可以工作,因为它加载的是模块,而不是包。这是大多数import语句的标准行为,但也有少数例外。
下面是Python 3中
urllib
的相同情况:看到了吗?这里没有子模块。要访问它的子模块,我们需要子模块:
希望这个简单的解释能有所帮助!
gfttwv5a3#
使用以下行导入:
而不是
我试过了,成功了。
z2acfund4#
使用scipy 1.2.1版解决此问题......