[英]Why does from scipy import spatial work, while scipy.spatial doesn't work after import scipy?
我想在我的代码中使用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'
。
第二种方法有什么问题?
导入包不会自动导入子模块。 您需要显式导入子模块。
例如import xml
不导入子模块xml.dom
>>> import xml
>>> xml.dom
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dom'
>>> import xml.dom
>>> xml.dom
<module 'xml.dom' from 'C:\Python27\lib\xml\dom\__init__.pyc'>
有一个像os.path
这样的例外。 ( os
模块本身将子模块导入其命名空间)
>>> import os
>>> os.path
<module 'ntpath' from 'C:\Python27\lib\ntpath.pyc'>
那是因为 scipy 是一个包,而不是一个模块。 当你导入一个包时,你实际上并没有加载其中的模块,因此package.module
会导致错误。
但是, import package.module
会起作用,因为它加载的是模块,而不是包。
这是大多数 import 语句的标准行为,但也有一些例外。
这是 Python 3 中urllib
的相同情况:
>>> import urllib
>>> dir(urllib)
['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '__path__', 'error', 'parse', 'request', 'response']
看? 那里没有子模块。 要访问它的子模块,我们要求子模块:
>>> import urllib.request
>>>
希望这个简单的解释有所帮助!
使用以下行导入:
import scipy.spatial # worked.
代替
import scipy # not working
我试过了,它奏效了。
使用scipy 1.2.1版本解决这个问题......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.