Ubuntu系统pip安装rpy2报'NoneType' object is not callable错误求助
本次安装失败的核心触发点是 /tmp 目录被设置了 noexec 挂载参数,禁止了该目录下二进制文件的执行权限。pip安装rpy2时会将依赖的cffi库临时解压到 /tmp 目录下,加载cffi的编译后端时因为没有执行权限加载失败,返回了None对象,后续代码尝试调用该对象时直接抛出TypeError: 'NoneType' object is not callable错误。
开头的PkgResourcesDeprecationWarning、SetuptoolsDeprecationWarning属于版本兼容警告,不是本次安装失败的根本原因。
方法1:临时修改/tmp目录权限
先执行命令解除/tmp的执行限制:sudo mount -o remount,exec /tmp
再正常安装rpy2:sudo pip3 install rpy2
安装完成后可以恢复/tmp的noexec权限:sudo mount -o remount,noexec /tmp方法2:指定pip临时目录(无需修改系统挂载参数)
先在当前用户目录下创建一个有执行权限的临时目录:mkdir ~/pip_tmp
安装时指定该目录为pip临时目录:TMPDIR=~/pip_tmp sudo pip3 install rpy2前置依赖检查
若执行以上操作后仍报错,可先安装rpy2所需的系统依赖:sudo apt update && sudo apt install -y r-base libcurl4-openssl-dev libssl-dev
也可先单独安装cffi依赖再装rpy2:sudo pip3 install cffi>=1.10.0 && sudo pip3 install rpy2
内容的提问来源于stack exchange,提问作者LostInTranslation

