在Namecheap共享主机上安装pandas失败的技术问题
解决Namecheap共享主机上pip安装pandas失败的问题
错误原因
Namecheap共享主机的系统/tmp目录默认启用了noexec权限限制,pip在构建pandas时会将numpy等依赖临时解压到/tmp目录,但该目录不允许执行共享对象文件(.so),因此触发核心错误:
Original error was: /tmp/pip-build-env-z2e3yd98/overlay/lib64/python3.9/site-packages/numpy/core/_multiarray_umath.cpython-39-x86_64-linux-gnu.so: failed to map segment from shared object: Operation not permitted
解决方案
方法1:临时指定本地临时目录安装
在虚拟环境所在目录创建本地临时文件夹,安装时指定该目录作为临时目录:
# 创建本地临时目录 mkdir -p ~/virtualenv/tmp # 指定临时目录安装pandas TMPDIR=~/virtualenv/tmp pip install pandas
方法2:永久配置pip使用本地临时目录
如果不想每次安装都手动指定临时目录,可修改pip全局配置:
# 创建pip配置目录 mkdir -p ~/.config/pip # 写入pip配置 cat > ~/.config/pip/pip.conf << EOF [global] temp-dir = ~/virtualenv/tmp EOF
配置完成后直接执行安装命令:
pip install pandas
方法3:安装预编译wheel包(跳过源码构建)
若上述方法仍有问题,可强制pip安装预编译wheel包,避免源码构建触发权限问题:
TMPDIR=~/virtualenv/tmp pip install pandas --only-binary :all:
原理说明
自定义本地临时目录不受系统/tmp的noexec权限限制,pip可在该目录正常解压、执行依赖的共享对象文件,完成numpy和pandas的安装流程。
内容的提问来源于stack exchange,提问作者Tlotliso Mafantiri
相关产品推荐
相关产品推荐

