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

234

我正在上大学课程并获得了一个“教学账户”,这是一个学校账户,我可以通过ssh登录来完成工作。我想在那台机器上运行我的计算密集型Numpy、Matplotlib和Scipy代码,但由于我不是系统管理员,因此无法安装这些模块。

我该如何进行安装?


14
您可以在安装软件包时通过在 setup.py 中添加 --user 或 --prefix 参数来进行本地化安装。详情请参阅 Python 模块的备选安装方法 - arunkumar
9个回答

320

在大多数情况下,最好的解决方案是依赖所谓的“用户站点”位置(详见PEP)。运行以下命令:

pip install --user package_name

以下是我原始答案中的更“手动”的方法,如果上面的解决方案适用于您,则无需阅读它。
使用easy_install,您可以执行以下操作:
easy_install --prefix=$HOME/local package_name

这将安装到

$HOME/local/lib/pythonX.Y/site-packages

(“local”文件夹是许多人使用的典型名称,但您当然可以指定任何您有写入权限的文件夹。)
(您需要手动创建)
$HOME/local/lib/pythonX.Y/site-packages

将其添加到您的PYTHONPATH环境变量中(否则easy_install会报错 - 顺便说一句,运行上面的命令一次以找到X.Y的正确值)。

如果您没有使用easy_install,请查找前缀选项,大多数安装脚本都允许您指定一个。

使用pip,您可以使用以下命令:

pip install --install-option="--prefix=$HOME/local" package_name

1
如果Python没有pipeasy_install可用怎么办? - Girardi
安装过程很顺利(使用pip方法),但是导入package_name时出现了问题。我需要更改/添加一些配置吗?另外,安装文件被复制到哪个文件夹中了? - idoda
2
// @AnotherDayAnotherRob,听起来像是一个好问题。 - Nathan Basanese
2
可能有意义更新答案并在顶部放置--user指令。:) - VasiliNovikov
1
@Girardi 如果你已经从源代码安装了Python到本地目录/my_python/,那么首先在此位置安装pip将非常有用。命令如下:wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | /my_python/bin/python - 然后你可以使用pip +前缀安装其他模块。 - teng_wenxuan
显示剩余4条评论

51

没有权限访问或安装easy_install

那么,您可以创建一个Python virtualenv (https://pypi.python.org/pypi/virtualenv) 并从这个虚拟环境中安装包。

在终端中执行4条命令即可(将当前版本号插入X.X.X的位置,例如16.1.0):

$ curl --location --output virtualenv-X.X.X.tar.gz https://github.com/pypa/virtualenv/tarball/X.X.X
$ tar xvfz virtualenv-X.X.X.tar.gz
$ python pypa-virtualenv-YYYYYY/src/virtualenv.py my_new_env
$ . my_new_env/bin/activate
(my_new_env)$ pip install package_name

来源和更多信息:https://virtualenv.pypa.io/en/latest/installation/


1
这个答案对我很有用,因为我的系统没有安装 pip - Dan Stowell
我尝试了一种针对本地Python安装的变体。 curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | ~/Python-2.7.8/python - Neerav
4
来源似乎已经移动,上面的内容不能直接使用。不过,在“https://virtualenv.pypa.io/en/latest/installation/”上的类似说明可以正常工作 :) - Andras Deak -- Слава Україні

13
你可以使用easy_install在没有root访问权限的情况下安装Python软件包。有一种标准方法是使用site.USER_BASE,它默认为$HOME/.local或$HOME/Library/Python/2.7/bin,并且默认情况下包含在PYTHONPATH中。
要做到这一点,请在您的主目录中创建一个.pydistutils.cfg文件:
cat > $HOME/.pydistutils.cfg <<EOF
[install]
user=1
EOF

现在您可以在非root权限下运行easy_install:

easy_install boto

另外,这也让您在没有root权限的情况下运行pip:

pip install boto

这对我有效。

来源自Wesley Tanaka的博客:http://wtanaka.com/node/8095


1
这对我在Linux服务器上无需root访问安装成功。谢谢。但我不知道为什么它能成功。有人可以给个提示吗? - ChathuraG

9

1
非常感谢。我已经成功地使用 python <lxml_distrib_dir>/setup.py install --home=<dir> 安装了 lxml 库。 - Serge S.

8

重要问题。我使用的服务器(Ubuntu 12.04)有easy_install3但没有pip3。以下是我如何在我的主文件夹中安装Pip和其他软件包。

  1. 请求管理员安装Ubuntu软件包python3-setuptools

  2. 安装了pip

就像这样:

 easy_install3 --prefix=$HOME/.local pip
 mkdir -p $HOME/.local/lib/python3.2/site-packages
 easy_install3 --prefix=$HOME/.local pip
  1. 添加Pip(以及其他Python应用程序)到环境变量中

像这样:

PATH="$HOME/.local/bin:$PATH"
echo PATH="$HOME/.local/bin:$PATH" > $HOME/.profile
  1. 安装Python套件

像这样

pip3 install --user httpie

# test httpie package
http httpbin.org

5

那么我接下来该怎么处理这个路径呢? - einpoklum

4
我使用JuJu,它基本上允许在您的$HOME/.juju目录中拥有一个非常小的Linux发行版(仅包含软件包管理器)。

它允许您在主目录中拥有自定义系统,通过proot可访问,并且因此您可以安装任何软件包而无需root权限。它将在所有主要的Linux发行版上正常运行,唯一的限制是JuJu只能在具有最低推荐版本2.6.32的Linux内核上运行。

例如,在安装了JuJu之后,要安装pip,只需键入以下命令:

$>juju -f
(juju)$> pacman -S python-pip
(juju)> pip

1

1

本地安装virtualenv(指令来源):

重要提示:将当前版本(例如16.1.0)插入到X.X.X中。
检查提取的文件名并将其插入到YYYYY中。

$ curl -L -o virtualenv.tar.gz https://github.com/pypa/virtualenv/tarball/X.X.X
$ tar xfz virtualenv.tar.gz
$ python pypa-virtualenv-YYYYY/src/virtualenv.py env

在您可以使用安装任何软件包之前,您需要source您的虚拟Python环境env

$ source env/bin/activate

要安装新的Python包(如numpy),请使用以下命令:

(env)$ pip install <package>

这基本上是tremendows的指南的更新版本。他的指南已经过时了。我的编辑被拒绝了。因此我将其作为新指南发布。 - Niklas

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