首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从scipy导入空间可以工作,而在导入scipy后scipy.spatial不能工作?

为什么从scipy导入空间可以工作,而在导入scipy后scipy.spatial不能工作?
EN

Stack Overflow用户
提问于 2014-01-12 13:40:58
回答 3查看 24.6K关注 0票数 24

我想在我的代码中使用scipy.spatial.distance.cosine。如果我执行import scipy.spatialfrom scipy import spatial之类的操作,我可以导入spatial子模块,但如果我简单地import scipy调用scipy.spatial.distance.cosine(...),则会导致以下错误:AttributeError: 'module' object has no attribute 'spatial'

第二种方法有什么问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-12 13:48:07

导入包不会自动导入子模块。需要显式导入子模块。

例如,import xml不导入子模块xml.dom

代码语言:javascript
复制
>>> 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模块本身将子模块导入其名称空间)

代码语言:javascript
复制
>>> import os
>>> os.path
<module 'ntpath' from 'C:\Python27\lib\ntpath.pyc'>
票数 27
EN

Stack Overflow用户

发布于 2014-01-12 13:47:57

这是因为scipy是一个包,而不是一个模块。当您导入一个包时,您实际上并没有加载里面的模块,因此package.module会导致一个错误。

但是,import package.module可以工作,因为它加载的是模块,而不是包。

这是大多数import语句的标准行为,但也有一些例外。

以下是Python3中urllib的相同情况:

代码语言:javascript
复制
>>> import urllib
>>> dir(urllib)
['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '__path__', 'error', 'parse', 'request', 'response']

看见?那里没有子模块。为了访问它的子模块,我们请求该子模块:

代码语言:javascript
复制
>>> import urllib.request
>>> 

希望这个简单的解释能有所帮助!

票数 9
EN

Stack Overflow用户

发布于 2020-02-19 16:55:36

使用scipy版本1.2.1来解决这个问题......

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21071715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档