"pip install" 何时构建 wheel?

5 浏览
0 Comments

"pip install" 何时构建 wheel?

我发现在不同的文件夹中,有时候pip install会构建wheel,这需要很长时间,而有时候却不会。我不确定为什么会这样,也不知道如何控制。

我的命令:bin/python -m pip install -r ../requirements.txt(由于!#的shebang行长度限制,所以我不直接使用pip)

没有构建wheel的输出(只需几秒钟):

Collecting numpy==1.10.4 (from -r ../requirements.txt (line 1))
Installing collected packages: numpy
Successfully installed numpy-1.10.4

构建了wheel的输出(至少需要2分钟):

Collecting numpy==1.10.4 (from -r ../requirements.txt (line 1))
  Downloading numpy-1.10.4.tar.gz (4.1MB)
    100% |████████████████████████████████| 4.1MB 92kB/s
Building wheels for collected packages: numpy
  Running setup.py bdist_wheel for numpy ... done
  Stored in directory: /root/.cache/pip/wheels/66/f5/d7/f6ddd78b61037fcb51a3e32c9cd276e292343cdd62d5384efd
Successfully built numpy
Installing collected packages: numpy
Successfully installed numpy-1.10.4

requirements.txt的内容:

numpy==1.10.4

0
0 Comments

当我们使用"pip install"命令安装Python包时,有时会遇到重新构建wheel的问题。在第一次安装包时,pip会构建一个wheel,然后将其缓存起来。在后续的安装过程中,pip会直接从缓存中读取已构建的wheel,而不再重新构建。下面是解决这个问题的方法:

1. 清除缓存:

   pip install --no-cache-dir 
   

这个命令会强制pip不使用缓存,并重新构建wheel。

2. 升级pip:

   pip install --upgrade pip
   

有时,旧版本的pip可能会导致重新构建wheel的问题。通过升级pip到最新版本,可以解决这个问题。

3. 使用--use-wheel选项:

   pip install --use-wheel 
   

这个选项会告诉pip在安装包时优先使用已构建的wheel,而不重新构建。

通过上述方法,我们可以解决"pip install"命令重新构建wheel的问题,从而提高包安装的效率。

0
0 Comments

当执行"pip install"命令时,会在什么情况下生成wheel文件?

今天遇到了一个问题,一个包的安装出现了问题,原因是该包的构建过程生成了错误的wheel文件,尽管直接安装工作正常。

经过一番调查,我发现目前(pip == 8.1.2),没有直接的方法来控制pip是否尝试从给定的包构建wheel。我找到了相关的源代码,并且发现wheel构建过程仅在以下情况下使用:

- wheel模块可导入

- 使用了缓存目录

基于这个逻辑,我们可以通过在安装命令行中添加"--no-cache-dir"来间接禁用pip使用基于wheel的构建。

看起来这个逻辑已经有了很大的改变(现在是pip == 19)。现在的代码可以追溯到github.com/pypa/pip/blob/…。不幸的是,在保留已经有wheel文件的包的情况下,似乎没有方便的标志可以关闭wheel构建功能(除了卸载wheel)。

实际上,你可以通过设置"--no-binary={package_name}"来指定哪些包不应该生成wheel文件。

pip还有"--only-binary"和"--prefer-binary"参数。

0
0 Comments

当你使用"pip install"命令安装一个包时,是否会生成一个wheel文件取决于这个包是纯Python包还是包含了C源代码的包。如果是纯Python包,那么不需要编译,只需要将文件复制到某个地方即可。如果包含了C源代码,那么就需要进行编译,执行编译器的调用和执行,这个过程会比较耗时。

关于wheel文件的更多信息,可以参考wheel的文档:http://wheel.readthedocs.org/en/latest/

至于numpy是否是一个纯Python包,这可以决定是否会由Python来构建一个wheel文件。但是这并没有解释为什么有时会生成wheel文件,有时又不会,正如问题所示。

解决方法暂时没有给出。

0