注:郭老师这个教程亲测有用,但是还是会遇到specific的问题,遇到问题请直接询问Chatgpt,因为我帮好几个人装了,每台mac出现的问题不一样,需要自己去问下GPT老师!
原作者:郭廷杰
郭老师Github主页: TingjieGuo (Tingjie Guo) · GitHub
环境配置
此教程不适用macOS 10.14(Mojave)及之前的版本。
如果你只想能用NONMEM,不在乎原理,这里有一个精简版的安装步骤How to install NONMEM on macOS。
macOS系统环境配置
1. 安装macOS开发者工具
1.1 Xcode Command Line Tools
Xcode Command Line Tools(简称CLT)是macOS的开发工具集,这其中的大部分工具我们都不会使用到,但却是成功配置NONMEM所必需的。macOS通常并不会预装CLT,因此我们需要手动安装它。你可以从Apple开发者网站上下载CLT的安装包然后再进行本地安装,但我更推荐下面这种使用命令行的方式。
在应用列表中打开终端程序Terminal.app,输入下列命令:
xcode-select --install
此时系统应该会如图提示安装CLT, 选择Install安装即可。
安装过程结束之后,建议使用以下命令来确认CLT的是否成功安装:
xcode-select -p
如果CLT安装成功的话,终端返回内容应该与下面相同或类似:
/Library/Developer/CommandLineTools
1.2 Homebrew
CLT虽然已经包含了很多开发工具,但我们的核心需求Fortran编译器并不在CLT工具集中,因此我们我们还需要单独安装Fortran编译器,这里我非常推荐使用Homebrew。Homebrew是为macOS及Linux系统开发的工具包管理程序,它里面包含了开源社区维护的各类工具,而且是已经编译好的可执行程序,大大降低了我们安装和维护各类工具的门槛。后面我们会使用到Homebrew安装GFortran和Perl。
同样地,我们在Terminal.app中执行以下命令,Homebrew就会自动安装好:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 安装Fortran编译器
NONMEM兼容的Fortran编译器只有GNU Fortran(GFortran)和Intel Fortran,前者开源。因此我们这里将使用Homebrew安装GFortran。GFortran有多个版本,但并非所有版本都能成功运行NONMEM,特别是在ARM架构的Mac电脑上,GFortran的最高版本不能超过11。截至2024年10月,以下配置已测试成功。
| 设备 | macOS 版本 | GFortran 版本 | NONMEM 版本 |
|---|---|---|---|
| Macbook Pro (M1, 2020) | Big Sur | 10.2 (x86) | 7.5.1 |
| Macbook Pro (M1, 2020) | Monterey | 11.3 (ARM) | 7.5.1 |
| Macbook Pro (M1, 2020) | Ventura | 11.5 (ARM) | 7.5.1 |
| Macbook Pro (M3 Pro, 2023) | Sonoma | 11.3 (x86) | 7.5.1 |
| Macbook Pro (M3 Pro, 2023) | Sequoia | 11.5 (ARM) | 7.5.1 |
| Macbook Pro (M4 Pro, 2024) | Sequoia | 11.5 (ARM) | 7.6.0 |
我们可以在Terminal.app中执行以下命令,指定Homebrew安装GFortran 11:
brew install gcc@11
Homebrew会自动下载与当前macOS版本所对应的GCC工具包,其中包含我们需要的GFortran。
安装后GCC的命令集会自动添加到系统的环境变量里,包括我们需要的gcc-11和gfortran-11。为了确认安装成功,我们可以在Terminal.app中使用如下命令:
gfortran-11 -v
这里你也可以使用gcc-11 -v。如果一切正常的话你应该会看到类似下面的返回信息:
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/opt/homebrew/Cellar/gcc@11/11.5.0/bin/../libexec/gcc/aarch64-apple-darwin22/11/lto-wrapper
Target: aarch64-apple-darwin22
Configured with: ../configure --prefix=/opt/homebrew/opt/gcc@11 --libdir=/opt/homebrew/opt/gcc@11/lib/gcc/11 --disable-nls --enable-checking=release --with-gcc-major-version-only --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-11 --with-gmp=/opt/homebrew/opt/gmp --with-mpfr=/opt/homebrew/opt/mpfr --with-mpc=/opt/homebrew/opt/libmpc --with-isl=/opt/homebrew/opt/isl --with-zstd=/opt/homebrew/opt/zstd --with-pkgversion='Homebrew GCC 11.5.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --build=aarch64-apple-darwin22 --with-system-zlib --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk --with-ld=/Library/Developer/CommandLineTools/usr/bin/ld-classic
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.5.0 (Homebrew GCC 11.5.0)
安装NONMEM需要gcc-11和gfortran-11这两个工具对代码进行编译,但NONMEM只能接受名为gcc和gfortran的命令(理论上可以改,但不太容易),所以我们仍然需要设置环境变量,手动将gcc和gfortran这两个命令指向gcc-11和gfortran-11。这里提供两种方法:
软链接
软链接本质类似于创建快捷方式,我们可以给gcc-11和gfortran-11这两个命令创建名为gcc和gfortran软链接从而实现执行后二者命令时执行gcc-11和gfortran-11。
打开Terminal.app,输入以下命令:
sudo ln -s $(which gcc-11) /usr/local/bin/gcc
sudo ln -s $(which gfortran-11) /usr/local/bin/gfortran
sudo命令会将其后面所接的命令以管理员的身份运行,此时系统会提示输入你的账户密码(即当前用户登录密码),注意此时屏幕上不会显示你所输入的内容,正常输入后按enter确认即可。
接下来输入以下命令来确认设置是否成功:
which gcc
which gfortran
返回内容应与下面一致:
/usr/local/bin/gcc
/usr/local/bin/gfortran
命令别名
3. 关闭macOS“门禁”
macOS有一套叫作“门禁”(Gatekeeper)的安全系统,用来检查用户想要运行的程序是否属于Apple认证的开发者。由于NONMEM安装程序未经过Apple认证,“门禁”系统会在NONMEM安装过程中触发,导致安装失败。我们接下来可以临时关闭这套系统。
打开Terminal.app,输入以下命令:
sudo spctl --global-disable
然后打开macOS的系统设置菜单,找到隐私与安全选项,其中“安全”选项下面有一项“Allow applications downloaded from”的设置,如下图所示:
最后一项“Anywhere”在关闭“门禁”后才会显示
在执行过上面的命令后,此时应该会看到系统已经选择了“Anywhere”,这样后面安装NONMEM就不会出现问题了。完成NONMEM安装之后,我们可以回到这里,选择“App Store and identified developers”,或者可以使用以下命令再开启“门禁”系统:
sudo spctl --global-enable
NONMEM安装
1. 安装源文件
开始之前,我们简单认识一下NONMEM安装文件夹里的一些内容。
NONMEM7.4.4根目录nm744CD中的内容
根目录下有许多文件名以install开头的文件,这些是我们安装NONMEM时需要直接运行的程序,不同文件对应不同的操作系统,对Windows而言,我们需要运行的是SETUP74.bat,如果是macOS, 我们需要运行的是SETUP74。nonmem.lic是NONMEM的授权文件,即使用许可,建议在安装NONMEM前先将授权文件拷贝至安装文件根目录下。readme_XXX.pdf是官方的说明文档。剩下的文件或文件夹中,除了前面已经说过的compiler文件夹外,其余的我们可以暂时先不管。
2. 安装命令
下面你可以根据你所使用的系统参考相应的安装步骤。
Windows
第一步要做的还是打开cmd,这里建议启动cmd时右键选择“以管理员身份运行”。以管理身份打开cmd之后,首先需要进入NONMEM安装文件的根目录,假设NONMEM安装源文件根目录位于C盘的nm744文件夹下,则输入命令:
cd c:\nm744CD
如果安装源文件根目录在D盘nm文件夹下,则输入:
cd d:\nm
接下来输入命令:
SETUP74 c:\nm744CD e:\nm744 gfortran
这条命令由四部份组成,首先是SETUP74,它表示要运行SETUP74.bat这个文件;接下来c:\nm744CD表示来源路径,即NONMEM安装文件根目录的地址,根据实际情况决定;然后e:\nm744表示目标路径,即安装NONMEM的位置,可以根据需求自定义;gfortran定义将要使用的Fortran编译器命令。这个命令其实省略了很多其他选项,完整的命令除上述四部份之外还有其他的参数选项,但这里只针对一般情况,其余选项一般不需要指定,细节可以参考readme_XXX.pdf文档。
MacOS
执行成功后系统会提示类似下图的信息,最后一行的提示Continue (y/n)? [y],直接enter确认即可。之后的过程就比较简单了,大多时间是在等待以及根据提示的默认选项按enter。
在进行到下图所示的一步时,在目标路径的根目录下可以找到progress.txt文件,这个文件里可以看到完成进度,每完成1%就在这个txt文件里写入一行。这一步是在编译源文件,比较花时间,这一步骤可以反映计算机CPU的性能。
安装的最后一步是测试,会提示Do you want to test the installation?,建议输入y测试安装是否成功。如果安装成功它会提示让你比较两个目标函数值,我看到的这个数字一直以来都是104.561,我猜你大概也是。至此,NONMEM安装就完成了。
PsN安装
2. macOS
2.1 安装及配置Perl环境
安装Perl
macOS内置了Perl,但PsN并不总能安装成功,建议用Homebrew再装一次Perl。
我们使用Homebrew来安装Perl,打开Terminal.app并执行以下命令:
brew install perl
安装结束后,输入以下命令测试Perl是否安装成功:
perl -v
正常的话会得到类似下面的返回信息:
This is perl 5, version 38, subversion 2 (v5.38.2) built for darwin-thread-multi-2level
Copyright 1987-2023, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at https://www.perl.org/, the Perl Home Page.
安装Perl模块
PsN的功能依赖一些额外的Perl模块,我们需要事先把它们安装好。
打开Terminal.app,执行以下命令:
sudo cpan Math::Random::Free Math::MatrixReal Mouse MouseX::Params::Validate Archive::Zip cpan YAML Capture::Tiny File::Copy::Recursive File::HomeDir Math::SigFigs Statistics::Distributions
在此期间请保证网络连接状态,安装成功或失败会有明确的提示信息。
2.2 安装PsN
首先去PsN项目官网下载PsN安装包,下载后打开解压该安装包,应该会得到一个名为PsN-Source的文件夹。
打开Terminal.app,执行以下命令:
cd ~/Downloads/PsN-Source # 进入到PsN安装文件目录,可修改为你的实际目录
sudo perl setup.pl
接下来根据提示输入y或n,如果不确定的话可以一路选y。若之前在计算机上安装过PsN,可能会提示询问是否保留原有的psn.conf文件,建议输入n,让程序新建一个psn.conf,这个文件里记录了一些配置信息,包括NONMEM版本、路径以及计算模型时的选项。安装程序会自动搜索NONMEM所在的路径,并自动设置好psn.conf,但之前也发现如果NONMEM装在比较深的目录下,PsN安装程序可能搜索不到,需要手动输入NONMEM的安装路径。




