'--install-option =' - prefix'`和`--root`和`--target`之间的差异(python)差异

Hib*_*u57 33 python pip

pip文件没有太多的字眼(我的眼睛),有关参数的处理源和目的地.

我经历了安装Sphinx的奇怪事情,pip3并且玩了可用的选项,似乎允许我在我想要的地方安装它(出于某些原因,我希望每个东西都在自己的目录中).我说"玩",不是说我没有读过文档也没试过--help,但是因为pip3 help install没有帮助,而且pip安装官方文档页面太短了,实际上说的不多于pip3 help install.

以下是完成的实验和观察结果.

第一个案例 --root

下载了当前的Sphinx存储库tarball,将其解压缩,进入新创建的目录并执行:

pip3 install --root /home/<user-name>/apps/sphinx -e .
Run Code Online (Sandbox Code Playgroud)

我虽然这是相同的--prefix,因为没有--prefix明显可用的选项.令我惊讶的是,它将命令安装在binPython3目录中(也在本地安装在它自己的目录中)和库目录中的一些东西,奇怪的是,而不是/home/<user-name>/apps/sphinx目录,我得到一个/home/<user-name>/apps/sphinx/home/<user-name>/apps/sphinx/…:它附加了指定的路径对自己.

特别是最后一点是否有意义?目的是--root什么?

第二种情况 --target

然后我,如果它不是--root,那可能是--target,所以我做了(清理后):

pip3 install --target /home/<user-name>/apps/sphinx -e .  
Run Code Online (Sandbox Code Playgroud)

它没有用,抱怨一个未被承认的--home选项.

--home它抱怨的是什么(我没有指明),究竟是--target什么?

第三种情况 --install-option='--prefix=…'

在WebO搜索和StackOverflow上的一个线程之后,我尝试了这个:

pip3 install --install-option='--prefix=/home/<user-name>/apps/sphinx' -e .
Run Code Online (Sandbox Code Playgroud)

它只是抱怨它无法安装.pth文件而且我的问题出了问题PYTHONPATH,这可以通过添加变量定义来重新启动:

export PYTHONPATH=/home/<user-name>/apps/sphinx/lib/python3.4/site-packages
pip3 install --install-option='--prefix=/home/<user-name>/apps/sphinx' -e .
Run Code Online (Sandbox Code Playgroud)

PYTHONPATH甚至在目录实际存在并且安装了任何内容之前就已经设置了这个集合,但是这个是好的(无论是否pip应该PYTHONPATH在过程中更新自己并提醒最终设置它,这是一个有争议的问题).

这个选项很好,也是不太明显的选择.

最后一个相关的:

--editable和之间有什么区别--src

更新#1

我不知道它是否与Sphinx相关,但我注意到了另外两件事.

pip3 install --install-option='--prefix=<install-dir>' -e <repository-dir>
Run Code Online (Sandbox Code Playgroud)

其中repository-dir是本地检出Sphinx,Sphinx安装在install-dir中,列出pip3 list但无法卸载.

相反,做

pip3 install --install-option='--prefix=<install-dir>' Sphinx
Run Code Online (Sandbox Code Playgroud)

也就是说,让我们pip3检索一个档案,Sphinx没有安装在install-dir中,而是安装在python目录中,列出pip3 list并可以卸载.

根据源是本地存储库还是远程存档,它不会安装在同一位置,也不会或将不可卸载.

依赖关系没有受到影响,在两种情况下都以相同的方式处理(安装在预期,列出和可卸载的位置).

更新#2

这种行为--root让我感觉到一种伪根(就像你在构建Debian软件包或交叉编译时得到的那种).如果它的目的是相同的,那么令我感到惊讶的道路恰恰相反,预期.

enr*_*cis 1

第一个也是显而易见的问题:为什么不直接从PyPI安装软件包?

\n
sudo pip install sphinx\n
Run Code Online (Sandbox Code Playgroud)\n

如果你想安装任何有setup.py文件的东西pip,你可以使用该--editable标志:

\n
\n

-e, --editable <path/url>

\n

从本地项目路径或 VCS URL 以可编辑模式安装项目(即 setuptools \xe2\x80\x9cdevelop mode\xe2\x80\x9d)。

\n
\n

因此,您只需发出命令(sudo如有必要,请添加前缀):

\n
pip3 install -e /path/to/pkg\n
Run Code Online (Sandbox Code Playgroud)\n

where/path/to/pkg是可以找到的目录setup.py(您提取文件的位置)。

\n

回答其他问题:

\n
    \n
  1. --root <dir>用于更改应在其中pip安装包资源的文件系统的根目录,而不是更改在何处查找包。

    \n
  2. \n
  3. --target 用于告知pip将包安装在哪个文件夹中。

    \n
  4. \n
  5. --install-option 用于设置将使用的一些变量setup.py,而不是更改pip应在何处查找文件。

    \n
  6. \n
\n

  • IMO 不要将 `sudo` 与 pip 一起使用,而是使用 `--user` 选项或 virtualenv。不要将系统 python 包与个人包混在一起。否则,使用“apt”或“yum”从 Linux 发行版的存储库进行安装 (4认同)
  • “--install-option 用于设置 setup.py 将使用的一些变量,而不是更改 pip 应在何处查找文件”:并且某些 `setup.py` 可能符合或不符合这些选项?`--target` 和 `--install-option='--prefix'` 是否要一起使用? (2认同)