Linux安装gmpy2
今天下午花了点时间配环境,主要困难是安装Python的gmpy2包。这是一个多精度浮点数快速计算库,因为依赖很多,所以在Linux上源码编译安装比较麻烦,而在Windows上则比较简单,直接下载预编译的wheel即可。本文参考了一篇网络文章,一些细节有所不同。
本文基于的环境是64位的Ubuntu 20.04 LTS,其他版本Linux可能会有出入。一些遇到"permission denied"的操作(如make install
),请更换安装目录,或用sudo
。
另外对于多核的机器,可以用类似make -j4
的命令并行编译加快速度。
确定依赖库的安装位置
编译gmpy2需要许多依赖,但是因为以静态库方式编译,所以这些依赖可以不安装在系统库目录里,随后也可以删除。因此可以自行确定方便的目录。本文中,库的安装目录为$HOME/static
,如果需要,记得更换为读者自己的目录。
1 | $ mkdir $HOME/static |
安装m4依赖
这是官方网站.
1 | $ wget https://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz |
可能出现的bug
我在编译m4时出现了类似如下bug:
1 | freadahead.c:91:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib." |
经过查询相关资料,根据这篇文章提供的方案解决问题。只需在m4源码目录(在这一目录下存在lib
目录)下执行
1 | sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c |
给源文件打上补丁即可。(后来回忆或许是我不小心下载了老版本的m4?不过本文给出的1.4.18应该是目前的最新版本了)
安装GMP
这是官方网站.
1 | $ wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz |
安装MPFR
这是官方网站.
1 | $ wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.xz |
相信读者也看出来了,其实就是每次增加依赖的静态库路径。
安装MPC
这是官方网站.
1 | $ wget https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz |
安装gmpy2
终于可以安装gmpy2了。GitHub repo是aleaxit/gmpy,本文安装的是目前最新release 2.1.0b5。
1 | $ wget https://github.com/aleaxit/gmpy/releases/download/gmpy2-2.1.0b5/gmpy2-2.1.0b5.tar.gz |
这里官方的INSTALL
似乎有点问题,--static-dir
选项写错了。到这为止应该已经安装完成了,可以用输出100以内质数测试一下(来源见参考文献[1]):
1 | import gmpy2 |
保存gmpy2.egg
如果和队友合作,或者要在不同的几台机器上配相同的环境,每次重复一遍这个流程也太麻烦了。因此可以把这次build的.egg
保存下来,之后可以分发,在新机器上用easy_install
即可安装。执行完上面的安装以后,应该可以在gmpy2源码目录下的build/bdist.linux-x86_64/gmpy2-2.1.0b5-py3.8-linux-x86_64.egg
找到.egg
文件。下次安装时可以用
1 | $ easy_install gmpy2-2.1.0b5-py3.8-linux-x86_64.egg |
参考文献
[2] gmpy2开发者 - Installing gmpy2 on Unix/Linux
[3] Jun626 - NUC980开源项目24-Please port gnulib freadahead.c to your platform!