如何在脚本/函数中检查已安装的MATLAB工具箱? (检查工具箱版本也会很好!)当有人试图在没有必需工具箱的情况下运行脚本时,这可以提供快速有用的错误消息。
想到一个快速的,虽然粗略的解决方案是解析ver
命令的文本输出。我想知道是否有更好的方法。
一些快速搜索显示ver product
或带有'test'
参数的license
函数可能有用,但我找不到工具箱名称的映射(即。'Image Processing Toolbox'
)产品名称(即'control'
)或要素名称(即image_toolbox
)。
此外,当我跑license('inuse')
时,我只收到以下内容:
>> a = license('inuse'); a a = feature: 'matlab' user: <username>
我希望获得我可以访问的许多工具箱的列表。
这个问题是在尝试早期测试同事脚本时提出的。不幸的是,它需要我目前缺乏的图像处理工具箱。一个有用的错误消息将节省时间来尝试诊断问题。现在我将在测试之前等待编译版本。
答案 0 :(得分:27)
ver
功能的一个缺点是,它只会告诉您已安装的内容,而不是具有可用许可的内容。可以安装工具箱而无需使用它(或者其他用户可以检出所有可用的许可证)。更好的选择是license
函数,(正如您所指出的)每个工具箱都需要一个唯一的"feature string"。
以下是从现已解散的newsgroup thread(链接现已死亡)中获取的各种工具箱的旧功能字符串列表:
featureStr = {'Aerospace_Blockset'; ...
'Aerospace_Toolbox'; ...
'Bioinformatics_Toolbox'; ...
'Communication_Blocks'; ...
'Communication_Toolbox'; ...
'Compiler'; ...
'Control_Toolbox'; ...
'Curve_Fitting_Toolbox'; ...
'Data_Acq_Toolbox'; ...
'Database_Toolbox'; ...
'Datafeed_Toolbox'; ...
'Dial_and_Gauge_Blocks'; ...
'Distrib_Computing_Toolbox'; ...
'Econometrics_Toolbox'; ...
'EDA_Simulator_Link_DS'; ...
'Embedded_Target_c166'; ...
'Embedded_Target_c2000'; ...
'Embedded_Target_c6000'; ...
'Embedded_Target_MPC555'; ...
'Excel_Link'; ...
'Filter_Design_HDL_Coder'; ...
'Filter_Design_Toolbox'; ...
'Fin_Derivatives_Toolbox'; ...
'Financial_Toolbox'; ...
'Fixed_Income_Toolbox'; ...
'Fixed_Point_Toolbox'; ...
'Fixed-Point_Blocks'; ...
'Fuzzy_Toolbox'; ...
'GADS_Toolbox'; ...
'IDE_Link_MU'; ...
'Identification_Toolbox'; ...
'Image_Acquisition_Toolbox'; ...
'Image_Toolbox'; ...
'Instr_Control_Toolbox'; ...
'Link_for_Incisive'; ...
'Link_for_ModelSim'; ...
'Link_for_Tasking'; ...
'Link_for_VisualDSP'; ...
'MAP_Toolbox'; ...
'MATLAB'; ...
'MATLAB_Builder_for_dot_Net'; ...
'MATLAB_Builder_for_Java'; ...
'MATLAB_Distrib_Comp_Engine'; ...
'MATLAB_Excel_Builder'; ...
'MATLAB_Link_for_CCS'; ...
'MATLAB_Report_Gen'; ...
'MBC_Toolbox'; ...
'MPC_Toolbox'; ...
'NCD_Toolbox'; ...
'Neural_Network_Toolbox'; ...
'OPC_Toolbox'; ...
'Optimization_Toolbox'; ...
'PDE_Toolbox'; ...
'Power_System_Blocks'; ...
'Real-Time_Win_Target'; ...
'Real-Time_Workshop'; ...
'RF_Blockset'; ...
'RF_Toolbox'; ...
'Robust_Toolbox'; ...
'RTW_Embedded_Coder'; ...
'Signal_Blocks'; ...
'Signal_Toolbox'; ...
'SimBiology'; ...
'SimDriveline'; ...
'SimElectronics'; ...
'SimEvents'; ...
'SimHydraulics'; ...
'SimMechanics'; ...
'Simscape'; ...
'SIMULINK'; ...
'Simulink_Control_Design'; ...
'Simulink_Design_Verifier'; ...
'Simulink_HDL_Coder'; ...
'Simulink_Param_Estimation'; ...
'SIMULINK_Report_Gen'; ...
'SL_Verification_Validation'; ...
'Spline_Toolbox'; ...
'Stateflow'; ...
'Stateflow_Coder'; ...
'Statistics_Toolbox'; ...
'Symbolic_Toolbox'; ...
'SystemTest'; ...
'Video_and_Image_Blockset'; ...
'Virtual_Reality_Toolbox'; ...
'Wavelet_Toolbox'; ...
'XPC_Embedded_Option'; ...
'XPC_Target'};
这涵盖了许多常见的内容,但并非详尽无遗,并且不包含新工具箱的功能字符串。对于所有MathWorks工具箱,似乎没有任何现成的当前要素字符串列表。我相信您可以在许可证文件中的“INCREMENT”行中找到它们,或者(as vlee mentions in a comment)您可以从给定工具箱中调用函数,然后使用license('inuse')
从显示的函数中获取要素字符串当前正在使用的工具箱列表。但是,上述两个选项都需要可用的许可证。
使用上面的功能字符串列表和函数license
,您可以检查您拥有许可证使用的工具箱。以下代码检查上述整个列表的许可证:
index = cellfun(@(f) license('test', f), featureStr);
availableFeatures = featureStr(logical(index));
但是,上述内容只是确认许可存在,而不是签出。许可证可能已过期,或者其他用户可以检出所有可用的许可证。为了绝对确定您将能够使用可用的工具箱,您实际上可以尝试检查所需的许可证,并测试您是否成功。以下代码尝试检查上面找到的所有可用工具箱的许可证:
index = cellfun(@(f) license('checkout', f), availableFeatures);
checkedOutFeatures = availableFeatures(logical(index));
警告词!:
As Jason S mentions in a comment below,不管怎样检查许可证都是一个坏主意,因为在你关闭MATLAB之前它们不会被发布。 您应该只签出您知道给定应用程序所需的许可证!通常,在您尝试使用给定工具箱中的功能之前,不会签出许可证。例如:
>> license('inuse')
matlab
>> gaussFilter = fspecial('gaussian'); % An Image Processing Toolbox function
>> license('inuse')
image_toolbox
matlab
答案 1 :(得分:11)
Ver似乎是要走的路,解析不应该那么难。我们来看看:
function tf = areTheseToolboxesInstalled(requiredToolboxes)
%ARETHESETOOLBOXESINSTALLED takes a cell array of toolbox names and checks whether they are currently installed
% SYNOPSIS tf = areTheseToolboxesInstalled(requiredToolboxes)
%
% INPUT requiredToolboxes: cell array with toolbox names to test for. Eg.
% {'MATLAB','Image Processing Toolbox'}
%
% OUTPUT tf: true or false if the required toolboxes are installed or not
%%%%%%%%%%%%%%%%%%%%%%%%%%
% get all installed toolbox names
v = ver;
% collect the names in a cell array
[installedToolboxes{1:length(v)}] = deal(v.Name);
% check
tf = all(ismember(requiredToolboxes,installedToolboxes));
顺便说一句,如果您需要检查版本,verLessThan是您的朋友。
答案 2 :(得分:7)
我知道这是一个非常古老的问题,但一个非常简单的答案实际上是在问题中(解析ver的输出)....
>> v = ver;
>> setdiff({v.Name}, 'MATLAB')'
ans =
'Aerospace Blockset'
'Aerospace Toolbox'
'Bioinformatics Toolbox'
'Communications System Toolbox'
'Computer Vision System Toolbox'
'Control System Toolbox'
'Conversion to SeDuMi'
'Curve Fitting Toolbox'
'DSP System Toolbox'
'Database Toolbox'
'Datafeed Toolbox'
'Econometrics Toolbox'
'Embedded Coder'
'Financial Derivatives Toolbox'
'Financial Toolbox'
'Fixed-Income Toolbox'
'Fixed-Point Toolbox'
'Fuzzy Logic Toolbox'
'Global Optimization Toolbox'
'Image Acquisition Toolbox'
'Image Processing Toolbox'
'Instrument Control Toolbox'
'MATLAB Coder'
'MATLAB Distributed Computing Server'
'MATLAB Report Generator'
'Mapping Toolbox'
'Model Predictive Control Toolbox'
'Neural Network Toolbox'
'Optimization Toolbox'
'Parallel Computing Toolbox'
'Partial Differential Equation Toolbox'
'Phased Array System Toolbox'
'RF Toolbox'
'Robust Control Toolbox'
'Signal Processing Toolbox'
'SimBiology'
'SimDriveline'
'SimElectronics'
'SimEvents'
'SimHydraulics'
'SimMechanics'
'SimPowerSystems'
'SimRF'
'Simscape'
'Simulink'
'Simulink 3D Animation'
'Simulink Coder'
'Simulink Control Design'
'Simulink Design Optimization'
'Simulink Fixed Point'
'Simulink Report Generator'
'Simulink Verification and Validation'
'Stateflow'
'Statistical Graphics Toolbox'
'Statistical Parametric Mapping'
'Statistics Toolbox'
'Symbolic Math Toolbox'
'System Identification Toolbox'
'SystemTest'
'Wavelet Toolbox'
答案 3 :(得分:4)
只需输入ver
即可显示matlab中安装的工具箱的完整列表。
答案 4 :(得分:2)
快速方法是列出工具箱目录的内容:
l = ls( toolboxdir('') )
使用该列表(不包括几个目录:shared,local),您可以使用ver找到工具箱的安装版本:
v = ver('nnet')
作为参考,这是我拥有的工具箱目录名称列表:
bioinfo
curvefit
database
gads
ident
images
nnet
optim
pde
signal
stats
wavelet
答案 5 :(得分:1)
一种实用的方法是使用try somefunction catch
语句启动代码,其中somefunction
对于您需要的工具箱而言是唯一的。
somefunction
可能由于多种原因而失败,例如您缺少可用许可证或系统上未安装工具箱。 try/catch
允许您优雅地中止并向用户提供有关无法执行所请求操作的确切原因的消息(现在)。
缺点是这是一种不那么通用的方法。它缺乏优雅,并且对命名空间错误很敏感。好处是它测试somefunction
是否真的有效。如果明智地使用它,它应该只在您真正需要它时才能获取共享许可证。