2016-04-21 35 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