同版本Python下不同用户无法导入numpy的问题问询
以下是几个最可能的原因及排查方向:
numpy安装目录的权限问题
默认用户安装numpy时,可能将其放在了只有自身有读/执行权限的目录下(比如默认用户的~/.local/lib/python2.7/site-packages),即使sys.path包含这个路径,第二个用户也没有权限访问里面的numpy文件。
可以先在默认用户中执行python -c "import numpy; print(numpy.__file__)"找到numpy的安装路径,再用ls -l <numpy安装路径的上级目录>查看权限,确认其他用户是否有r(读)和x(执行)权限。环境变量差异影响模块加载
虽然sys.path内容一致,但部分环境变量会干扰Python的模块查找或底层库加载:PYTHONUSERBASE:如果默认用户设置了这个变量指向自己的模块目录,第二个用户未设置或无权限访问,会导致加载失败;LD_LIBRARY_PATH:numpy依赖的底层C库(如MKL、OpenBLAS)如果在这个变量指定的路径中,而第二个用户无该路径的访问权限,会触发导入错误;
可以让两个用户分别执行env | grep -E 'PYTHON|LD_LIBRARY'对比环境变量差异。
sys.path顺序引发的加载优先级问题
虽然sys.path包含的路径完全一致,但顺序不同可能导致Python优先尝试加载某个权限不足的目录下的同名模块(比如某个公共目录里有不完整的numpy文件夹),而默认用户的sys.path中正确的numpy路径排在前面,所以能正常加载。
可以让第二个用户执行python -c "import sys; print(sys.path)",对比默认用户的sys.path顺序,检查靠前的路径中是否存在numpy相关文件且自身无访问权限。Python缓存文件权限或损坏
Python生成的.pyc文件、__pycache__目录,或者numpy的编译缓存文件,可能因权限问题导致第二个用户无法读取,或缓存文件本身损坏。
可以让第二个用户尝试用python -B -c "import numpy"启动Python(-B参数会禁止生成和使用pyc文件),如果能正常导入,说明是缓存文件的问题,清理用户目录下的Python缓存即可。
内容的提问来源于stack exchange,提问作者Mitchell van Zuylen

