$HOME/.local 的用途是什么

What is the purpose of $HOME/.local

我注意到我的机器上有 $HOME/.local,这个目录似乎主要包含与 python 相关的内容,here 是完整列表吗(有点长)。

请问这个目录是哪个action创建的?我想它是 pip install --user -r requirements.txt (下面是我已经弄明白的命令)但我想知道是否还有其他工具可以在这里存储数据?我想如果它是 pip 那么 easy_install 也可以这样做吗?您是否知道是否有任何其他工具使用此目录或者它是 pip 专用的?

以下命令显示从该目录导入了一些python模块,最后一个输出是here(有点长):

marek@ubuntu:~$ python -c 'import mock; print mock.__file__'
/home/marek/.local/lib/python2.7/site-packages/mock.pyc
marek@ubuntu:~$ echo $PYTHONPATH

marek@ubuntu:~$ tree .local/ | grep  mock
│           ├── mock-1.0.1.egg-info
│           ├── mock.py
│           ├── mock.pyc
│           │   ├── mock.py
│           │   ├── mock.pyc
marek@ubuntu:~$ pip show -f mock
---
Name: mock
Version: 1.0.1
Location: /home/marek/.local/lib/python2.7/site-packages
Requires: 
Files:
Cannot locate installed-files.txt
marek@ubuntu:~$ python -c 'import sys, pprint; pprint.pprint(sys.path)'
['',
 '/home/marek/.local/lib/python2.7/site-packages/nupic-0.3.0.dev0-py2.7-linux-x86_64.egg',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/home/marek/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
marek@ubuntu:~$ python -v 2>&1 | tee modules

following 回答说如果这个目录是用 pip 创建的,应该有 $HOME/.local/bin/hg 但我没有这个文件。那么它是用 pip 创建的吗?

它没有直接连接到Python,但是Pip使用它。让我们从头开始。首先你应该明白,/usr目录是干什么用的:

In current Unices, /usr is where user-land programs and data (as opposed to 'system land' programs and data) are.

应该用于系统安装的数据,即发行版的官方包。

/usr/local 目录反映了 /usr 目录的结构,但系统管理员可以使用它为所有用户安装本地或第三方软件包。

~/.local 目录现在具有相同的用途,仅供单个用户使用。

通常您会使用默认包管理器使用 /usr 目录安装您的包。但是由于您使用 Pip 作为 Python 模块的包管理器,因此这些模块安装在 ~/.local.

所以基本上 pip 可能已经创建了 ~/.local 或任何其他程序将数据写入位于那里的目录之一。 ~/.local/share 例如,大多数应用程序使用它来存储它们的数据。

$HOME/.local 是用户应用程序将其文件和文件夹放置在用户主目录中的位置。

根据 Home Directory section of the file-hierarchy(7) man-page,user-specific 数据应在 $HOME/.local 内拆分为以下 sub-directories:

  • ~/.local/bin 用于应出现在用户的 $PATH 搜索路径中的可执行文件。 在 Python 的情况下,这可能是像 pipenv.
  • 这样的工具
  • ~/.local/lib 适用于与所有体系结构兼容的静态私有供应商数据。 在 Python 的情况下,这些是像 requests.
  • 这样的库
  • ~/.local/share 用于多个包之间共享的资源。 在 Python 的情况下,这可能是 virtualenvs。它也是 XDG Base Directory Specification 的一部分,它被称为 $XDG_DATA_HOME.
  • 的默认值

从以上观察可以清楚地看出,$HOME/.local 与 Python 本身没有任何关系。 pip install --user 将其文件放入 $HOME/.local 仅表示它符合 freedesktop.org 发布的建议。

如果您使用 sudo pip install 安装软件包,它将根据 Filesystem Hierarchy Standard into the /usr 层次结构分发软件包文件,这与 system-level 中的逻辑相同,就像您的发行版的软件包一样经理有。