2016-04-21 34 views
1

可能是一个基本的错误,但原因是逃避我。我试图导入一个包,但是我得到一个错误,说它找不到或导入。matlab:不能导入包

首先,我将当前目录设置为包的父目录,这不起作用。

其次,文档说,包的父文件夹必须添加到matlab路径。我试过了,但仍然没有运气。

enter image description here

我试图导入analysis时,得到了同样的错误,是不是由于使用plot作为包名。

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

编辑 我在安装的两个版本上都遇到了这个问题:2015b和2016a。

+1

发布一个包的链接?关于你使用'addpath'(a)它只会用于当前会话。使用'savepath'使其成为永久的,并且(b)它不包含子文件夹,使用'genpath'就像这样'addpath(genpath(pwd))'([来自'addpath' docs](http:// www.mathworks.com/help/matlab/ref/addpath.html)) – Dan

+0

链接到最小工作示例... https://www.dropbox.com/sh/n2lc52s0kf6ktpv/AABZ6cVgeVF3JfafLjKmU5m4a?dl=0 –

+0

但你怎么样想用它吗?我问,因为你也可以使它像一个工具箱,即离开文件夹名称中的'+'并使用'addpath(genpath ...'语法取决于你的用例 – Dan

回答

2

答案是,有些违反直觉,你根本不需要拨打importThe docs表示

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

哪个是你的addpath(pwd)不会再声明(重点是我的):

所有的包必须 使用包名前缀,除非到包,函数的引用,和类你输入包裹

在这个阶段,这意味着你应该能够调用

analyse.testFunc 

如果你要import analyse.testFunc那么你就能够调用testFunc不与命名空间作序,但因为你要保留的命名空间答案是根本不叫import

+1

谢谢。这也提供了使用'mypackage.subpackage.myfunction()'访问子包,所以如果采取这种方法,不需要'genpath'看来 –

+0

@BenVincent很高兴知道 – Dan