为什么 pip 将包安装到 ~/.local/bin 中?

dja*_*fan 16 python software-installation files pip lsb

当我用 pip 安装这个“Taurus Blazemeter 'bzt'”程序时,它最终被安装到~/.local/bin 文件夹中。

mkdir ~/bzt && cd ~/bzt
sudo apt-get install python default-jre-headless python-tk python-pip python-dev libxml2-dev libxslt-dev zlib1g-dev
sudo pip install bzt
Run Code Online (Sandbox Code Playgroud)

有谁知道这个~/.local文件夹的用途以及为什么会安装这样的 Python 程序?

iga*_*gal 16

简短的回答是,这~/.local/bin是 Python 用户脚本目录的默认值,pip如果它执行用户本地安装,则可能会将可执行文件安装到此目录中。它还可以将文件安装到 的其他子目录中~/.local,这是用户基本目录的默认值。更多详情如下。


我不确定这是否是它最早的介绍,但该~/.local目录出现在systemd init 系统的文件系统层次结构规范中,它定义了以下几个子目录:~/.local

~/.local/bin

应出现在用户的 $PATH 搜索路径中的可执行文件。建议不要在这个目录中放置对从 shell 调用没有用的可执行文件;这些应该放在 ~/.local/lib 的子目录中。在此位置放置依赖于体系结构的二进制文件时应小心,如果主目录在具有不同体系结构的多个主机之间共享,则可能会出现问题。

~/.local/lib

与所有架构兼容的静态私有供应商数据。

~/.local/lib/arch-id

放置公共动态库的位置。要使用的架构标识符在 Multiarch Architecture Specifiers (Tuples) 列表中定义。

~/.local/share

多个包之间共享的资源,例如字体或图稿。通常,存储在此目录下的文件的精确位置和格式受确保互操作性的规范的约束。如果应用程序发现 $XDG_DATA_HOME 集,它应该使用其中指定的目录而不是此目录。

~/.localPython对目录的采用似乎已在 Python 2.6 中引入,并记录在 PEP(Python 增强提案)370 中:

该规范包括以下 Unix 系统(包括 Mac OS X)的定义。

  • 用户基本目录

    ~/.local

  • 用户脚本目录:

    ~/.local/bin

  • 用户站点目录:

    ~/.local/lib/python2.6/site-packages

  • 用户数据目录:

    ~/.local/lib/python2.6

由此我们可以得出结论,Python 具有所谓的“基本用户目录”的概念,其默认值为~/.local. 基本用户目录site模块Python 文档中进行了讨论。特别是,它提供了用于确定用户基本目录和用户站点目录、--user-base--user-site选项标志的值的方法。你可以像这样使用它们:

user@host:~$ python -m site --user-base

/home/user/.local

user@host:~$ python -m site --user-site

/home/user/.local/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

StackExchange 站点上发布了几个与~/.local我用作参考的目录相关的问题: