【问题标题】:matlab: cannot import packagematlab:无法导入包
【发布时间】:2016-08-14 07:21:43
【问题描述】:

可能是一个基本的错误,但原因是我无法理解。我正在尝试导入一个包,但我收到一条错误消息,提示无法找到或导入它。

首先我将当前目录设置为包的父目录,这样不行。

其次,文档说必须将包的父文件夹添加到matlab路径中。我试过了,还是不行。

这不是因为使用 plot 作为包名,因为我在尝试导入 analysis 时遇到了同样的错误。

我可以做的是使用:import plot.*import analyse.* 导入,然后继续使用包中的函数,但我想使用命名空间(即不使用.*)。

编辑 我安装的两个版本都有这个问题:2015b 和 2016a。

【问题讨论】:

  • 发布包的链接?关于您对addpath (a) 的使用,它仅适用于当前会话。使用savepath 使其永久化,并且(b)它不会包含子文件夹,使用genpath 像这样addpath(genpath(pwd))from the addpath docs
  • 但是你想怎么用呢?我问是因为你也可以把它变成一个工具箱,即在文件夹名称中去掉+,并根据你的用例使用addpath(genpath...语法
  • 除非我误解了,否则我仍然认为您不需要使用import,除非您只想将一部分打包到您的路径中。来自these docs,我认为您当前的addpath(pwd) 应该可以使用,并且您应该能够使用analyse.testFunc。文档声明对包中的包、函数和类的所有引用都必须使用包名前缀, 除非你导入 包。
  • documentation 的右下角有一个“这有帮助吗”部分,单击否,您可以写信给他们解释您的困惑是什么。这是 MATLAB 专有的优势之一,他们确实会回应有关文档的反馈。

标签: matlab import package


【解决方案1】:

答案是,有点违反直觉,您根本不需要致电importThe docs 声明

顶级包文件夹的父级必须位于 MATLAB 路径中。

你的addpath(pwd) 做了什么,然后说明(重点是我的):

包中所有对包、函数和类的引用必须 使用包名前缀,除非你导入包

意思是在这个阶段你应该可以调用

analyse.testFunc

如果您要使用import analyse.testFunc,那么您将能够调用testFunc,而无需在其前面加上命名空间,但由于您想保留命名空间,答案是根本不调用import

【讨论】:

  • 谢谢。这也提供了对带有mypackage.subpackage.myfunction() 的子包的访问,因此如果采用这种方法似乎不需要genpath
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2020-08-04
  • 1970-01-01
相关资源
最近更新 更多