python,改变用户站点目录或使用--user安装setup.py --prefix

7 投票
1 回答
13710 浏览
提问于 2025-04-18 11:06

我想以非管理员用户的身份安装Python模块,像这样:

$ pip install -I --install-option="--prefix=~/usr" scipy

可惜的是,通常这样做是行不通的,除非你加上 --user 这个选项。不过,--user 不能和 --prefix 一起使用。单独使用 --user(不加 --prefix)会把模块安装到 ~/.local 目录下,我觉得这样不好,因为我已经有一个整理得很好的 ~/usr 目录,不想再往 env 里添加更多东西,让 ~/.local 也变得可用。

所以我有几个问题:

  1. 我该如何让 --prefix--user 一起在 setup.py 中工作,或者还有什么其他方法可以让 setup.py 成功运行,而不使用 --user?
  2. 或者我能不能通过 env 的某种方式,把用户的站点目录从 ~/.local 改成 ~/usr?

1 个回答

8

来回答你的第一个问题:

在Greg Ward写的《安装Python模块》指南中,我们看到:

注意,不同的安装方式是互相排斥的:你可以选择 --user,或者 --home,或者 --prefix 和 --exec-prefix,或者 --install-base 和 --install-platbase,但你不能把这些选项混在一起用。

来回答你的第二个问题:

在同一指南中,有一部分是关于替代安装:用户方案,我们看到:

文件将被安装到 site.USER_BASE 的子目录中。

site.USER_BASE 这个链接指向https://docs.python.org/2/library/site.html#site.USER_BASE。在这里,我们还被要求查看有关PYTHONUSERBASE环境变量的信息:

这个变量定义了用户基础目录,用来计算用户的 site-packages 目录的路径,以及使用 python setup.py install --user 时的 Distutils 安装路径。

另外,你可能还会对家目录方案感兴趣:

“家目录方案”的想法是,你可以建立和维护一个个人的 Python 模块库。这个方案的名字来源于 Unix 系统中的“家”目录,因为 Unix 用户通常会把他们的家目录设置得类似于 /usr/ 或 /usr/local/。

撰写回答