由於有不少python
包是用c
編寫的,這樣一來在不同的CPU
架構(x86,MIPS64等,python 默認提供的是x86架構的包)上使用時需要重新編譯。目前有兩種方法來處理這個問題。
- 使用
pip
在線安裝,利用pip
在線安裝時會自動下載相應的源碼包並編譯的功能 - 找到源碼然後手動編譯,一般在https://pypi.org 可以到源碼
使用這兩種方法時都得安裝編譯環境及編譯此包所需的依賴,不然就會出現編譯失敗或安裝失敗的提示。
用 pip install
安裝時,如果找不到相應的.whl
包,則自動下載源碼之後進行編譯。編譯後的包在~/.cache/pip/wheels
目錄下。可以把這些編譯好的.whl
文件複製出來。
pip
安裝時的cahce
目錄可以通過命令來查看。相關參考:https://pip.pypa.io/en/stable/reference/pip_cache/
# pip cache dir
/root/.cache/pip
- 使用pip在線安裝
$ pip install pyarrow
Collecting pyarrow
Downloading https://files.pythonhosted.org/packages/ed/c9/85d179d5a0575e1b066fb94bfe1e37b6d3ca546b58e75b9d1ca4952320de/pyarrow-0.17.1.tar.gz (2.6MB)
100% |████████████████████████████████| 2.6MB 146kB/s
Installing build dependencies ... done
Requirement already satisfied: numpy>=1.14 in /home/loongson-gd/.local/lib/python3.7/site-packages (from pyarrow) (1.18.5)
Building wheels for collected packages: pyarrow
Running setup.py bdist_wheel for pyarrow ... error
Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-ekyp7jb9/pyarrow/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-ca7vzlm6 --python-tag cp37:
running bdist_wheel
- 源碼編譯
$ cd opencv-python-34
$ python3 setup.py bdist_wheel
Collecting numpy==1.14.5
Using cached https://files.pythonhosted.org/packages/d5/6e/f00492653d0fdf6497a181a1c1d46bbea5a2383e7faf4c8ca6d6f3d2581d/numpy-1.14.5.zip
Building wheels for collected packages: numpy
- 提取編譯好的包
提取編譯好的包到~/wheel
目錄腳本如下:
#!/bin/bash
##此目錄用來存放待提取的whl包
mkdir -p ~/wheel
cd ~/.cache/pip/wheels
for f in `find . -name "*.whl"`
do
echo $f
cp $f ~/wheel -rvf
done