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
之间的区别是什么?
我无法判断它的狮身人面像是否相关,但我注意到了另外两件事。
做
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
列出并且可以被卸载。
根据源是本地存储库还是远程存档,它不会安装在同一位置,也不会或将无法卸载。
依赖关系没有受到影响,在两种情况下都以相同的方式处理(安装在预期,列出和卸载的位置)。
使用--root
的行为让我感觉到一种伪根(就像你在构建Debian软件包或交叉编译时得到的那种)。如果它的意图相同,那么令我感到惊讶的是相反的,预期的。
答案 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
的目录(解压缩文件的位置)。
回答其他问题:
--root <dir>
用于更改pip
应安装包资源的文件系统的根目录,而不是更改包的位置。
--target
用于告知pip
在哪个文件夹中安装软件包。
--install-option
用于设置setup.py
将使用的一些变量,而不是更改pip
应查找文件的位置。