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

时间:2014-08-15 20:21:42

标签: python pip

pip documentation缺少太多措辞(在我看来),关于处理来源和目的地的参数。

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

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

--root

的第一个案例

downloaded the current Sphinx repository tarball,解压缩它,进入新创建的目录并执行:

pip3 install --root /home/<user-name>/apps/sphinx -e .

我虽然这与--prefix相同,因为没有--prefix选项可见。令我惊讶的是,它将Python3的bin目录中的命令(也在本地安装在其自己的目录中)安装在其库目录中的某些内容中,并且奇怪,而不是/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 .  

它没有用,抱怨一个无法识别的--home选项。

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

--install-option='--prefix=…'

的第三种情况

在StackOverflow上进行了一些网页搜索和一个帖子之后,我尝试了这个:

pip3 install --install-option='--prefix=/home/<user-name>/apps/sphinx' -e .

它只是抱怨它无法安装.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 .

我甚至在目录实际存在之前就已经设置了PYTHONPATH,并且在其中安装了任何内容,但是这一个是正常的(pip是否应该更新PYTHONPATH这个过程并提醒它最终确定,这是一个值得商榷的问题。)

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

另一个最后一个相关的:

--editable--src之间的区别是什么?

更新#1

我无法判断它的狮身人面像是否相关,但我注意到了另外两件事。

pip3 install --install-option='--prefix=<install-dir>' -e <repository-dir>

其中 repository-dir 是Sphinx的本地签出,Sphinx安装在 install-dir 中,由pip3 list列出但是可以&#39;被卸载。

相反,做

pip3 install --install-option='--prefix=<install-dir>' Sphinx

即让pip3检索存档,Sphinx未安装在 install-dir 中,而是安装在python目录中,由pip3 list列出并且可以被卸载。

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

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

更新#2

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

1 个答案:

答案 0 :(得分:1)

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

sudo pip install sphinx

如果您要安装setup.py文件pip的任何内容,可以使用--editable标记:

  

-e, --editable <path/url>

     

从本地项目路径或VCS网址以可编辑模式(即setuptools“开发模式”)安装项目。

所以你可以发出命令(必要时带有sudo的前缀):

pip3 install -e /path/to/pkg

其中/path/to/pkg是可以找到setup.py的目录(解压缩文件的位置)。

回答其他问题:

  1. --root <dir>用于更改pip应安装包资源的文件系统的根目录,而不是更改包的位置。

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

  3. --install-option 用于设置setup.py将使用的一些变量,而不是更改pip应查找文件的位置。