繁体   English   中英

为什么从 scipy 导入空间工作,而 scipy.spatial 在导入 scipy 后不起作用?

[英]Why does from scipy import spatial work, while scipy.spatial doesn't work after import scipy?

我想在我的代码中使用scipy.spatial.distance.cosine 如果我执行诸如import scipy.spatialfrom 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM