【问题标题】:How to get the COBRA toolbox working with proper SBML support under MATLAB in linux (such as Ubuntu 14.04)?如何让 COBRA 工具箱在 Linux 中的 MATLAB(例如 Ubuntu 14.04)下与适当的 SBML 支持一起工作?
【发布时间】:2014-05-18 22:15:21
【问题描述】:

考虑这 4 个软件:

  1. 眼镜蛇 2.05

  2. LibSBML 5.10

  3. MATLAB R2013a(也称为 8.1,64 位;MATLAB 不再支持 32 位 Linux)

  4. 64 位 Linux 操作系统(例如 Ubuntu 14.04 或最新的 Mint 但不限于它们)

简介

COBRA 工具箱是在 MATLAB 之上运行的优化套件,旨在开发用于代谢网络建模的 MATLAB 代码。这样的“网络”是一个方程组,可以有非常多的方程和变量(例如数千个)。因此,根据某种格式规范读取和写入这些大型模型的例程是必不可少的,而 COBRA 使用标准 SBML。

问题

与 Windows 版本不同,Linux 二进制包不能很好地开箱即用地集成:首先,可供下载的 libSBML(开源)的预编译 Linux 二进制文件不附带 MATLAB 支持.如果尝试使用预编译的 libSBML,COBRA 将找不到“MATLAB 绑定”,因此无法在 m 脚本中从磁盘读取和写入 SBML XML 文件。

问题

需要做什么才能使 COBRA 2.05 在 Linux(Ubuntu 14.04 或最新的 Mint,但这不太可能特定于发行版)下运行在 MATLAB R2013a 之上,能够读取和写入 SBML XML 文件?换句话说,需要在系统范围内做什么才能让 COBRA 通过自己的testSBML 测试?

【问题讨论】:

    标签: linux matlab io bioinformatics sbml


    【解决方案1】:

    这就是我让它工作的方式,以及我可以从关于我的 Linux 机器如何工作的所有麻烦中学到的东西。我希望我不会忘记/遗漏/误会任何事情。

    1。 MATLAB

    1.1。安装 MATLAB

    将它安装在它的默认位置(您需要 root 访问权限),不要像我想的那样固执。为什么:

    1.1.1。整合

    您很可能在某个时候想要安装一些使用 MATLAB 框架的其他软件,而在现实世界中,即使您知道如何告诉它在哪里寻找,软件也并不总是能找到其他软件。

    1.1.2。让您的生活更轻松

    尽管在一个有大量可用空间并且可以在多台机器上使用的地方安装一个大型软件似乎是个好主意(特别是在 Linux 中,它没有被称为 Registry 的可憎之处,并且有符号链接),这可能只是一个好主意 - 除了项目 1.1.1 - 如果那个地方是一个带有 Linux 文件系统的分区,因为在某些时候,某些可执行文件/脚本将需要执行权限,并且将整个分区挂载为其所有文件的执行权限是相当不安全的。因此,不要将 MATLAB 放在外部 HD 的 NTFS 分区中;也许在外部 HD 中为特定于 Linux 的东西创建一个 Linux 分区可以解决这个问题,但这有多少麻烦?

    1.2。设置 MATLAB,以便人们和其他软件可以启动它

    尽管我在某处看到 MATLAB 安装程序最终显示了一个选项,以便为方便起见在系统路径中创建符号链接,但在我的情况下并没有。但这没关系,因为无论如何我都必须用以下 shell 脚本(相同的路径,相同的文件名)替换符号链接 /usr/local/bin/matlab

        #!/bin/sh
        export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
        exec /usr/local/MATLAB/R2013a/bin/matlab $*
    

    OBS:MATLAB 需要 LD_LIBRARY_PATH 以便以后查找 SBML 绑定并能够使用它们。此外,如果您安装了一些第三方求解器,例如 TOMLAB,您很可能需要在这个小启动器脚本中添加更多路径。 OBS 2:在我的情况下,安装脚本没有自动创建任何启动器或快捷方式,但我发现了一个无图标和无扩展名的 Matlab 8.01 文件和一个作为 png 文件的 matlab 图标,第一个文件是一个模板.desktop 文件,我可以编辑它以满足我的需要并放入 /usr/share/applications 以便 Unity Dash 找到它。这个Matlab.desktop 文件的内容是:

        [Desktop Entry]
        Type=Application
        Icon=/usr/local/MATLAB/R2013a/Matlab.png
        Name=Matlab 8.01
        Comment="Start Matlab 8.01"
        Exec=/usr/local/MATLAB/R2013a/bin/matlab -desktop
        Categories=Development;
        Name=Matlab 8.01
        GenericName=Matlab 8.01
        Comment="Start Matlab 8.01"
    

    2。 libSBML

    2.1。安装 libSBML

    libSBML 由特定于 Ubuntu(和 CentOS)的 deb 包提供,还提供了适用于多种 Windows 和 MacOSX 的版本(它们的主页:http://sbml.org/Software/libSBML)。猜猜哪个平台的二进制文件没有使用 MATLAB 支持编译?当然,Linux。这意味着您将需要从源代码编译(因此 deb 包对您毫无用处)。编译:

    2.1.1。安装依赖项

    依赖libxml2-dev(来自软件管理器或终端):

        sudo apt-get install libxml2-dev
    

    2.1.2。为自己节省一些未来的时间

    通常,一个人会做configuremake,然后是make install。但不建议这样做,原因与安装任何不包含在一个非常小的包中的东西相同:您将无法控制哪些文件去了哪里,并且需要保留源代码才能运行make uninstall如果您以后需要卸载它。因此,安装checkinstall 并用它来替换步骤make install,因为checkinstall 为您的系统创建了一个包,以后可以像任何常规打包软件一样(从软件管理器或终端)卸载或重新安装:

        sudo apt-get install checkinstall
    

    2.1.3。配置编译过程

    获取 LibSBML 源代码并将其解压缩到某个文件夹。从终端导航到该文件夹​​并配置编译:

        ./configure --with-matlab
    

    OBS:使用with-matlab 标志,配置脚本将失败,它找不到文件名为matlab 的可执行文件。如果失败,则输出找不到matlab文件,但它执行的测试实际上既是对于文件的存在,也是对于它是否可执行。因此,如果文件在 NTFS 分区中,即使找到该文件,configure 也会失败,但会告诉您找不到该文件。您可以强制它通过传递在/path/to/matlab/root 中查找可执行文件(它将在该路径中查找bin 文件夹,并在该bin 文件夹中查找可执行文件):

        ./configure --with-matlab=/path/to/matlab/root
    

    OBS:这会将 libSBML 安装在默认位置:/usr/local/lib。同样,让它安装在默认位置是个好主意,但如果需要更改它,可以传递带有标志的路径:--prefix=/your/installation/path

    OBS 2:您可能会问为什么 libSBML 需要找到并执行 matlab 以支持它进行编译:它需要稍后启动 MATLAB 来构建 MEX 文件(编译的 MATLAB 代码),所以我推测您不会如果您的 MATLAB 没有生成 MEX 文件的编译器,则无法安装 libSBML。

    2.1.4。构建和安装 libSBML

        make
        checkinstall
    

    非常重要的 OBS

    I) checkinstall 要求确认它要创建的包的元数据。在我的例子中,version 字段的字符串默认为“Source”(不带引号),这导致checkinstall 失败,因为dpkg(实际构建 deb 文件的系统工具)未能抱怨版本号必须以数字开头。因此,节省一些时间并确保version 字段中的字符串以数字开头(即“5.10”,显然没有引号)

    II) checkinstall 询问您是否要从未来的软件包文件中排除 make install 命令将放入您的主文件夹并说最好排除它们。 LibSBML 有一个 test.xml 文件,稍后它需要在 $HOME 文件夹中,否则它不会让您与 MATLAB 集成。即使它告诉您缺少test.xml,它也不会告诉您该文件应该在哪里,或者该文件是否是库附带的文件。我只注意到它是因为checkinstall 早先找到了$HOME/test.xml 引用(当然,我从包中排除了它)并且我发现这很奇怪。所以,节省一些时间,从checkinstall生成的包中排除$HOME/test.xml,然后在源代码文件夹中搜索test.xml,并在@987654367完成安装libSBML后将其复制到$HOME @。

    2.2。将 libSBML 集成到 MATLAB

    启动 MATLAB,导航到步骤 2.1.5 中安装 SBML MATLAB 绑定的位置(在我的例子中:/usr/local/lib)并运行文件 @ 987654369@ 应该在那里。

    2.2.1。共享库问题

    在我的例子中,由于一个未解决的老问题,我遇到了一个错误:libstdc++.so.6 没有对GLIBCXX_3.4.15 的引用。事实证明,MATLAB 正在尝试使用 /usr/local/MATLAB/R2013a/sys/os/glnxa64 中附带的 libstdc++.so.6.0.13libstdc++.so.6 是指向此文件的符号链接),它确实没有该引用(可以通过发出以下命令来验证:

        strings /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6.0.13 | grep GLIBC
    

    )。我的系统有一个位于/usr/lib/x86_64-linux-gnulibstdc++.so.6.0.19 具有该引用,因此我通过正确设置LD_LIBRARY_PATH 来强制MATLAB 使用6.0.19(请参阅步骤1.2) 并且还通过将 MATLAB 附带的 libstdc++.so.6 重命名为其他名称,这样它就不会找到它,并且会继续寻找,直到找到我的系统。 我的一个运行 Linux Mint 的朋友不需要重命名任何东西:对他来说,设置 LD_LIBRARY_PATH 就足够了。

    2.2.2。其他问题

    installSBML.m 将失败,如果它没有找到步骤 2.1.5 中提到的 $HOME/test.xml 文件,无论该库是否实际工作。它假定如果它无法使用它假定位于$HOME 中的文件来测试自己,那么用户无论如何都不应该选择安装它。

    3。 COBRA / SBML 工具箱

    3.1。设置眼镜蛇

    在 MATLAB 中,导航到 <YOUR_COBRA_ROOT_FOLDER_HERE>/external/toolboxes/SBMLToolbox-4.1.0/toolbox 并在那里运行文件 install.m。您应该已完成所有设置,以便它找到您在步骤 2.2 中设置的 MATLAB 绑定。

    3.2。 MATLAB 设置路径问题

    我必须以 root 身份手动编辑文件 /usr/local/MATLAB/R2013a/toolbox/local/pathdef.m 以包含文件夹 /usr/local/lib(libSBML 及其 MATLAB 绑定所在的位置)以使该设置保持不变。每次我重新启动 MATLAB 时,它的 setpath 都会恢复到默认值,无论我在通过 MATLAB GUI 设置其 setpath 时是否以 root 身份启动 MATLAB。

    3.3。测试

    现在您希望已将所有点连接起来。试试看:在 MATLAB 中,导航到 <YOUR_COBRA_ROOT_FOLDER_HERE> 并发出:

        initCobraToolbox
        testAll
    

    如果您没有安装和配置任何第三方求解器,它应该通过 19 测试中的 14,包括 SBML 测试 (testSBML) .现在您可以将 SBML 文件加载到 MATLAB 中并使用它们。

    【讨论】:

    • 好问题和好答案!感谢发帖
    【解决方案2】:

    我还需要通过以下方式将 /usr/local/lib/libsbml.so.5 的符号链接添加到 MATLAB sys 文件夹:

    sudo ln -s /usr/local/lib/libsbml.so.5 /usr/local/MATLAB/R2014a/sys/os/glnxa64/
    

    这终于使安装成为可能。 我使用 Cmake 安装。为此需要在源码包中找到FindMatlab.cmake并手动插入MATLAB路径!

    .............
            elseif(EXISTS "/Applications/MATLAB_R2008a.app/")
                    set(MATLAB_ROOT_PATH "/Applications/MATLAB_R2008a.app/")    
                endif()
            else()
                if (EXISTS "/usr/local/MATLAB/R2014a/")
                    set(MATLAB_ROOT_PATH "/usr/local/MATLAB/R2014a/")
                endif()
            endif()
    ..........
    

    【讨论】:

      【解决方案3】:

      仅供参考,为了解决 2.2.1 的共享库问题,我需要安装包 matlab-support(在 Ubuntu 存储库中)

      【讨论】:

        猜你喜欢
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        相关资源
        最近更新 更多