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