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

问题描述 投票:32回答:1

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=…'的第三个案例

在WebO搜索和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

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

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

其中repository-dir是Sphinx的本地签出,Sphinx安装在install-dir中,由pip3 list列出但无法卸载。

相反,做

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

也就是说,让pip3检索存档,Sphinx没有安装在install-dir中,而是安装在python目录中,由pip3 list列出并且可以卸载。

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

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

更新#2

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

python pip
1个回答
1
投票

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

sudo pip install sphinx

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

-e, --editable <path/url>

从本地项目路径或VCS URL以可编辑模式(即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应该查找文件的位置。
© www.soinside.com 2019 - 2024. All rights reserved.