我在没有root权限的远程计算机上有一个帐户,我需要安装本地版本的Python(远程计算机的Python版本与我的某些代码不兼容),Numpy和Scipy。从昨天开始,我一直在尝试在本地安装numpy,但没有成功。
我在/home/myusername/.local/中成功安装了本地版本的Python(2.7.3),因此我通过执行/home/myusername/.local/bin/python
来访问此版本的Python。我尝试了两种安装Numpy的方法:
我从官方网页下载了最新稳定版本的Numpy,解压缩后,进入解压后的文件夹并执行:/home/myusername/.local/bin/python setup.py install --prefix=/home/myusername/.local
。但是,我得到以下错误,其后是一系列其他错误(从这一个导出):
gcc -pthread -shared build/temp.linux-x86_64-2.7/numpy/core/blasdot/_dotblas.o
-L/usr/local/lib -Lbuild/temp.linux-x86_64-2.7 -lptf77blas -lptcblas -latlas
-o build/lib.linux-x86_64-2.7/numpy/core/_dotblas.so
/usr/bin/ld: /usr/local/lib/libptcblas.a(cblas_dptgemm.o): relocation
R_X86_64_32 against `a local symbol' can not be used when making a shared
object; recompile with -fPIC
不知道这意味着什么(除了错误显然与LAPACK库有关),我只是做了与上面相同的命令,但现在把LDFLAGS =' - fPIC',如错误所示,即,我做到了
LDFLAGS="-fPIC" /home/myusername/.local/bin/python setup.py install --prefix=/home/myusername/.local
。
但是,我得到了同样的错误(除了在上面的gcc命令之后加上前缀-fPIC)。
我尝试使用pip安装它,即在我的本地路径中成功安装pip后执行/home/myusername/.local/bin/pip install numpy
/。但是,我得到完全相同的错误。
我在网上搜索,但没有一个错误似乎与我的相似。我的第一个猜测是,这与需要执行root权限的某些代码有关,或者与LAPACK库的版本有一些问题。
帮助,有人吗?
答案 0 :(得分:3)
错误消息告诉您,您的ATLAS库尚未使用-fPIC
标志构建。这意味着它无法链接到像Python扩展模块这样的共享库。您需要使用-fPIC
标志重建ATLAS。 ATLAS文档描述了如何执行此操作。
答案 1 :(得分:2)
从源头构建是一种痛苦。是否有可能避免这样做?
如果我们假设您正在尝试在x86计算机上安装(英特尔,AMD,无论如何),您是否可以在另一台 拥有root的x86计算机上安装Python,然后制作tar Python安装的存档,将tar复制到另一台计算机,并解压缩tar存档?
上面的问题是,预构建的Python可能有硬编码路径,可以在哪里查找库:它可能需要库在/usr/share
或其他什么。这将是一个黑客,但你可能能够chroot
监狱并让Python运行。
您可能还想看一下Enthought Python Distribution(EPD)。我相信EPD安装程序只是询问您希望安装EPD的位置,并将其安装在那里。
http://www.enthought.com/products/epdgetstart.php?platform=linux
有一个免费版的EPD。如果你想要64位,你需要支付EPD,但如果32位适合你,EPD Free可能就是你所需要的。
http://www.enthought.com/products/epd_free.php
P.S。 Enthought网站似乎拒绝任何不以www.
开头的网址!这意味着某些Google搜索链接不起作用,除非您编辑它们以在开头插入www.
。我相信他们很快就会解决这个问题。
答案 2 :(得分:0)
您可能需要查看EasyBuild,以便在启用numpy和scipy的情况下构建本地Python版本,请参阅http://hpcugent.github.com/easybuild/。
它基本上把所有令人讨厌的东西都从你身上拿走了,你只需要稍微配置一下(指明你想要软件最终的位置,然后再开始),然后你就可以用你选择的软件包构建Python了用一个命令。