![安装包时是否可以保存 pip 编译的二进制文件?](https://linux22.com/image/135877/%E5%AE%89%E8%A3%85%E5%8C%85%E6%97%B6%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BF%9D%E5%AD%98%20pip%20%E7%BC%96%E8%AF%91%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在开发一个 Raspberry Pi 3 项目。我的项目需要的东西之一是 cython。
在 virtualenv 内的 Raspberry Pi 上运行pip install cython
大约需要 40 分钟才能完成,因为 cython 显然需要首先编译。在这 40 分钟内,top
显示 cc 正在运行,尝试编译内容,100% 使用一个核心。
我每天需要多次执行此操作,因为我一直需要将 SD 卡重置为 Raspbian 的新映像。这显然非常耗时,并且会减慢进度。
当 pip 编译完 cython 后,二进制文件存储在哪里?在虚拟环境中?文件系统上的其他地方?
如果它们存储在 virtualenv 中,我可以存档整个 virtualenv 文件夹,并将其恢复到新的 Linux 中,并期望它能够工作吗?我知道 virtualenv 不应该是可移植的(不使用 arg --relocatable
,这似乎有其自己的问题),但就我而言,当我恢复 virtualenv 时,virtualenv 的路径将保持不变。
答案1
只需从缓存目录复制轮文件即可。当pip install pkgname
发出并且pip
找不到可安装的兼容轮时,它会从源 dist 构建一个轮并将其存储在缓存中以供将来重新安装时重用。要查找wheel文件,请发出
$ find $HOME/.cache/pip -type f -name Cython*.whl
备份文件;要从本地文件安装,只需发出
$ pip install path/to/file.whl
从这里去哪里:本地存储库
当您收集了大量预构建的轮子时,下一步将是设置一个本地 PyPI 存储库来安装。最简单的方法是将轮子组织到以包命名的目录中并运行一个简单的 HTTP 服务器:
└── repodir
├── Cython
│ └── Cython-0.28.0-cp36-cp36m-linux_aarch64.whl
...
使用例如启动服务器
$ python3 -m http.server -p 9000
现在您可以将存储库传递给pip
:
$ pip install Cython --extra-index-url=http://127.0.0.1:9000
或者甚至将存储库 URL 保留在 to 中,pip.conf
以免每次都输入它:
# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000
如果你想要了解更多,有很多不错的 PyPI repo 服务器可供选择,devpi
它们提供多功能包管理、Web UI 等。