Compiling
安裝軟體包時是否可以保存 pip 編譯的二進製文件?
我正在為 Raspberry Pi 3 開發一個項目。我的項目需要的一件事是 cython。
在 virtualenv 內的 Raspberry Pi 上執行
pip install cython
大約需要 40 分鐘才能完成,因為顯然需要先編譯 cython。在這 40 分鐘內,top
顯示 cc 正在執行,嘗試編譯內容,使用 100% 的一個核心。我每天都需要這樣做幾次,因為我一直需要將 SD 卡重置為 Raspbian 的新圖像。這顯然非常耗時,並且會減慢進度。
當 pip 完成編譯 cython 時,二進製文件儲存在哪裡?在虛擬環境中?文件系統上的其他地方?
如果它們儲存在 virtualenv 中,我可以歸檔整個 virtualenv 文件夾,並將其還原到新的 Linux,並期望它能夠工作嗎?我知道 virtualenvs 不應該是可移植的(不使用
--relocatable
arg,這似乎有其自身的問題),但就我而言,當我恢復它時,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 等。