在非默认目录中安装.whl Python包

14

我正在尝试安装64位版本的NTLK,它是以.whl文件形式提供的,并希望将其安装在与标准python34 / Lib文件夹不同的目录中。我使用的是Windows 10 64位和Python 3.4 64位。

我首先尝试了这个问题中的指示(对于其他模块有效)。

我在CMD中键入的命令是:

py -m pip install --install-option="--prefix=$PATH_NAME" nltk-3.0.4-py2.py3-none-any.whl

它立即给我以下错误:

UserWarning: 由于使用了--build-options / --global-options / --install-options,禁用所有轮子的使用。

似乎我无法使用--install-option安装WHL文件。 是否有其他方法可以在非默认目录中安装.whl软件包?

编辑:我将其标记为已解决,因为所提出的解决方案允许我在自己的用例中完成所需的操作。 但是,由于使用--root选择备用目录存在固有限制,它并不完全回答问题。从技术上讲,这个问题没有正确的解决方案,有关详细信息,请参阅答案的评论。

编辑 - 2017年3月3日:看起来在PIP的8.0版本中已解决此问题,并添加了--prefix参数。 我已相应更改了接受的答案。


1
使用源代码安装pip install会调用构建过程,该过程运行setup.py脚本,并因此接受此步骤的--install-options。然而,安装wheels不会调用此构建过程,并且尚未就支持这些用例(截至目前)做出决定。 - tutuDajuju
1
然而,对于某些情况,pip install 目前支持 --user--root,这可能可以实现您所需的功能。 - tutuDajuju
@tutuDajuju:什么是“一些情况”?它是否接受这些参数作为轮子,还是你是说它取决于更具体的事情(比如它适用于某些包但不适用于其他包)? - BrenBarn
这些参数适用于wheel,我的意思是这些参数并不涵盖所有可能的情况(而--install-option可以),例如--root=$DIR将会安装一个包(包括wheel)到$DIR/usr/local/lib/python2.7/site-packages - tutuDajuju
@tutuDajuju 使用 --root 与 .whl 一起使用可以解决问题,但它会一直显示“要求已满足”,所以我不得不使用 pip install --upgrade --root="$path" $file_path,尽管没有现有的安装。我不明白为什么会发生这种情况,也许你可以提供一个解释?无论如何,你能否将你的解决方案发布为答案,这样我就可以将其标记为正确答案? - Marlon Dyck
@MarlonDyck 是的,看起来这又是一个问题(https://github.com/pypa/pip/issues/3029),涉及到 --root ,但不涉及 --user - tutuDajuju
3个回答

8
你可以使用自 8版本 起就可用的 pip install--prefix 选项

--prefix

Installation prefix where lib, bin and other top-level folders are placed
请注意,pip uninstall 没有 --prefix 选项,因此没有明显的方法可以卸载以这种方式安装的软件包。作为解决方法,请将 PYTHONUSERBASE 设置为前缀目录,例如:
PYTHONUSERBASE=prefix-dir python3 -m pip uninstall package-name

6

为什么会发生这种情况

当从源代码运行 pip install 时,它会调用构建过程,该过程运行 setup.py 脚本并将传递给它的 --install-option

但是,安装 wheels 并不会调用此构建过程,并且目前还没有关于支持这些用例的决定(请参见正在进行的讨论)。

可能的解决方案

然而,pip install 目前支持使用选项--user--root安装到自定义位置,这可以实现您所需的目标。

注意事项

如评论中所述,存在一个问题,即在使用 --root 时可能无法检测到包是否已安装,并且解决方法可能是使用 --upgrade--ignore-installed 选项。

另外,使用 --root 将模块安装到 user_defined_path/python34/Lib/site-packages/。这使得该选项可用于在不同的驱动器或非默认 python 安装上安装库,但不允许在特定目录下的特定文件夹中进行安装。


1
这解释了为什么会出现错误,但并没有回答“有没有一种方法可以将wheel安装到特定目录(不是相对于用户或根目录)?”这个基本问题。你是在说这是不可能的吗? - BrenBarn
你说的不是相对于根目录吗?虽然根目录可以回答这个问题,但是--install-option仍有更多灵活的选项,详见你在Github上评论的问题 - tutuDajuju
1
正如您的评论所说,使用--root==$DIR将安装到$DIR/usr/local/lib/python2.7/site-packages。如果我想要安装到/my/own/directory怎么办呢? - BrenBarn
1
确切地说,你唯一能做的就是像往常一样使用 --install-options,同时加上 --no-use-wheel / --no-binary。甚至还有更多的安装方案无法与wheels一起使用 - tutuDajuju
或者,您可以使用符号链接进行黑客攻击。 - tutuDajuju

0

另一种解决问题的方法是使用7-zip并解压缩whl文件,解压缩的目录中将给您一个适当的Python模块文件夹,您可以将其复制并粘贴到任何您想要的地方


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接