如何在没有root权限的情况下安装Python包?

33
我正在Mac OS X上使用numpy/scipy/pynest进行一些研究计算。为了提高性能,我们租用了一个400节点的Linux集群,以实现并行处理任务。问题是我们不被允许在集群上安装任何额外的软件包(没有sudo或其他安装工具),他们只提供了原始的Python环境。那么我该如何在集群上运行我的脚本呢?是否有办法将这些模块整合起来(numpy和scipy也有一些编译的二进制文件)以便在没有安装软件包的情况下解释和执行代码呢?

我不太清楚你的问题是什么--大多数Python模块只是一些Python代码,你可以使用import调用它们。如果这是问题所在,并且你不能使用pip或者easy_install,你可以直接下载这些包并将其放置于Pythonsite-packages中,然后通过import导入它们。 - jdotjdot
@jdotjdot,这些模块中不仅有Python代码,还有编译后的二进制文件。 - Timothy
3
对于 numpyscipy 来说是正确的。但是你所说的“不能安装包”是什么意思?你具体不被允许安装或放置在集群上的是什么? - jdotjdot
@jdotjdot 我们没有权限使用 sudo,也没有任何安装工具。 - Timothy
如果所需的依赖项(Python之外)未安装,则安装scipy可能并不容易。 - Fábio Dias
显示剩余4条评论
4个回答

44

在您的主目录中安装软件包时,不需要root权限。 您可以使用以下命令完成此操作:

pip install --user numpy

或者从源代码编译

python setup.py install --user

请看这里
第一个替代方案更加便利,因此如果服务器没有pipeasy_install,您应该礼貌地要求管理员添加它,并向他们解释其好处(他们将不再受到个别软件包请求的困扰)。

9
客气地请求管理员添加它,我怎么没想到!天哪,我们这些极客太菜了... - Timothy
3
@Skyler:向管理员提问绝对是最好的选择!根据你的问题,我认为他们可能会反对这个想法。(我仍然建议在安装了pip之后使用virtualenvs,这也可能解决你另一个问题。) - David Robinson
1
这应该是 python setup.py install --user。请参见 https://pythonhosted.org/setuptools/easy_install.html#id37 - Piotr Dobrogost

12

通过virtualenv软件包,您可以创建虚拟环境。

它会创建一个文件夹(例如venv),其中包含Python可执行文件的新副本和一个新的site-packages目录,您可以在其中“安装”任意数量的软件包,而无需任何管理员访问权限。因此,通过 source venv/bin/activate激活该环境将使Python具有等同于安装这些软件包的环境。

我知道这对SGE集群有效,虚拟环境的激活方式可能取决于您的集群配置。

您可以尝试使用以下步骤在自己的site-packages目录中在集群上安装virtualenv

  1. 这里下载virtualenv并将其放入您的集群中

  2. 使用setup.py将其安装到特定的本地目录以用作您自己的site-packages:

    python setup.py build
    python setup.py install --install-base /path/to/local-site-packages
    
    将该目录添加到您的PYTHONPATH中:
  3. export PYTHONPATH="/path/to/local-site-packages:${PYTHONPATH}"
    
    创建虚拟环境:
    virtualenv venv
    

@Skyler:你可以在有控制权的系统上安装virtualenv,在那里创建虚拟环境,然后将文件传输到集群(除非我错了),你甚至不需要virtualenv去激活环境,只需要创建即可 - 使用bash脚本激活环境。但是,这仅适用于您在创建虚拟环境的系统与集群的操作系统和架构相同的情况下-您可能需要进行大量定制。 - David Robinson
你也可以安装virtualenvwrapper包,它会安装一些新的命令,你可以使用mkvirtualenv envname创建你的虚拟环境,并自动激活它。http://www.doughellmann.com/projects/virtualenvwrapper/ - iferminm
2
@Skyler:抱歉,请尝试将“--install-base”替换为“--home”。 - David Robinson
@DavidRobinson 顺便说一下,集群已经提供了一些依赖项。我想通过克隆当前本地环境来创建一个虚拟环境,这样我就不必再次安装它们了。这可行吗?我在这里发布了另一个问题:https://dev59.com/pGYq5IYBdhLWcg3wzDrk - Timothy
@Skyler:我不是100%确定,但我认为它会复制它们。 - David Robinson
显示剩余6条评论

1
Python发行版Anaconda解决了这些问题中讨论的许多问题。 Anaconda不需要管理员或root访问权限,并且能够安装到您的主目录。 Anaconda带有许多相关包(如scipy,numpy,sklearn等),以及conda安装程序,以安装必要的其他包。可从https://www.continuum.io/downloads下载。

1

你可以通过调用以下方式从任意路径导入模块:

sys.path.append()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接