Compiling

安裝軟體包時是否可以保存 pip 編譯的二進製文件?

  • July 1, 2018

我正在為 Raspberry Pi 3 開發一個項目。我的項目需要的一件事是 cython。

在 virtualenv 內的 Raspberry Pi 上執行pip install cython大約需要 40 分鐘才能完成,因為顯然需要先編譯 cython。在這 40 分鐘內,top顯示 cc 正在執行,嘗試編譯內容,使用 100% 的一個核心。

我每天都需要這樣做幾次,因為我一直需要將 SD 卡重置為 Raspbian 的新圖像。這顯然非常耗時,並且會減慢進度。

當 pip 完成編譯 cython 時,二進製文件儲存在哪裡?在虛擬環境中?文件系統上的其他地方?

如果它們儲存在 virtualenv 中,我可以歸檔整個 virtualenv 文件夾,並將其還原到新的 Linux,並期望它能夠工作嗎?我知道 virtualenvs 不應該是可移植的(不使用--relocatablearg,這似乎有其自身的問題),但就我而言,當我恢復它時,virtualenv 的路徑將保持不變。

只需從記憶體目錄中複製輪文件。當pip install pkgname發布並且pip找不到要安裝的兼容輪時,它會從源 dist 建構一個並將其儲存在記憶體中以供將來重新安裝重用。要查找輪文件,請發出

$ 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

現在您可以將 repo 傳遞給pip

$ pip install Cython --extra-index-url=http://127.0.0.1:9000

甚至將 repo URL 保存在pip.conf不每次都輸入它:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000

如果你想了解更多,那裡有很多花哨的 PyPI 儲存庫伺服器,比如devpi提供多功能包管理、Web UI 等。

引用自:https://unix.stackexchange.com/questions/452082