2020年12月30日 星期三

Python 學習筆記 : 安裝外部函式庫 (套件)

自從上周在 "Python資料可視化之美" 這本書上看到 "人生苦短, 我用 Python" 這句話後, 決心收斂一統天下的野心, 之前熱中的 R 與 Julia 就暫時打住, 專心於學習 Python 技術. 首先就是把之前向母校借的幾本 Python 書看完 (其實是複習), 老老實實寫完筆記後就趕快歸還吧! 
Python 安裝後就已內建許多套件 (packages), 可以直接用 import 指令匯入使用, 這些內建套件稱為標準函式庫 (standard library). 我們也可以將自行開發的模組打包成套件分享給別人使用, 這種函式庫稱為外部函式庫或第三方套件 (third party packages), 例如 Pypi 網站即有許多高手上傳之第三方套件供人免費下載安裝, 目前已有高達 28 萬個函式庫專案 :



1. 安裝外部函式庫 :

在連網情況下可直接在命令列用 pip 指令安裝外部套件 (macOS 請用 pip3 指令) :

pip instal 套件名稱 

Python 在 3.4 版後內建了 pip 模組, 可以用下列指令更新 pip 版本, 例如 :

python -m pip install --upgrade pip      

C:\Users\User>python.exe -m pip install --upgrade pip  
Requirement already satisfied: pip in c:\python37\lib\site-packages (20.3.1)
Collecting pip
  Downloading pip-20.3.3-py2.py3-none-any.whl (1.5 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.3.1
    Uninstalling pip-20.3.1:
      Successfully uninstalled pip-20.3.1
Successfully installed pip-20.3.3

安裝套件指令如下 (macOS 用 pip3) :

pip install 套件名稱    

例如安裝媲美 R 語言繪圖函式庫 ggplot2 的 plotnine 繪圖套件 :

C:\Users\User>pip install plotnine   
Collecting plotnine
  Downloading plotnine-0.7.1-py3-none-any.whl (4.4 MB)
Requirement already satisfied: patsy>=0.5.1 in c:\python37\lib\site-packages (from plotnine) (0.5.1)
Requirement already satisfied: matplotlib>=3.1.1 in c:\python37\lib\site-packages (from plotnine) (3.2.1)
Requirement already satisfied: numpy>=1.16.0 in c:\python37\lib\site-packages (from plotnine) (1.16.0)
Requirement already satisfied: statsmodels>=0.11.1 in c:\python37\lib\site-packages (from plotnine) (0.12.1)
Requirement already satisfied: scipy>=1.2.0 in c:\python37\lib\site-packages (from plotnine) (1.4.1)
Collecting descartes>=1.1.0
  Downloading descartes-1.1.0-py3-none-any.whl (5.8 kB)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\python37\lib\site-packages (from matplotlib>=3.1.1->plotnine) (1.0.1)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\python37\lib\site-packages (from matplotlib>=3.1.1->plotnine) (2.3.1)
Requirement already satisfied: python-dateutil>=2.1 in c:\python37\lib\site-packages (from matplotlib>=3.1.1->plotnine) (2.7.5)
Requirement already satisfied: cycler>=0.10 in c:\python37\lib\site-packages (from matplotlib>=3.1.1->plotnine) (0.10.0)
Requirement already satisfied: six in c:\python37\lib\site-packages (from cycler>=0.10->matplotlib>=3.1.1->plotnine) (1.12.0)
Requirement already satisfied: setuptools in c:\python37\lib\site-packages (from kiwisolver>=1.0.1->matplotlib>=3.1.1->plotnine) (51.0.0)
Collecting mizani>=0.7.1
  Downloading mizani-0.7.2-py3-none-any.whl (62 kB)
Collecting pandas>=1.1.0
  Downloading pandas-1.2.0-cp37-cp37m-win_amd64.whl (9.1 MB)
Requirement already satisfied: pytz>=2017.3 in c:\python37\lib\site-packages (from pandas>=1.1.0->plotnine) (2018.9)
Collecting numpy>=1.16.0
  Using cached numpy-1.19.4-cp37-cp37m-win_amd64.whl (12.9 MB)
Collecting palettable
  Downloading palettable-3.3.0-py2.py3-none-any.whl (111 kB)
Installing collected packages: numpy, pandas, palettable, mizani, descartes, plotnine
  Attempting uninstall: numpy
    Found existing installation: numpy 1.16.0
    Uninstalling numpy-1.16.0:
      Successfully uninstalled numpy-1.16.0
  Attempting uninstall: pandas
    Found existing installation: pandas 0.24.0
    Uninstalling pandas-0.24.0:
      Successfully uninstalled pandas-0.24.0
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tensorflow 2.3.1 requires numpy<1.19.0,>=1.16.0, but you have numpy 1.19.4 which is incompatible.
Successfully installed descartes-1.1.0 mizani-0.7.2 numpy-1.19.4 palettable-3.3.0 pandas-1.2.0 plotnine-0.7.1

注意, 最後的警語提示了可能的版本衝突問題, 因安裝 plotnine 過程中將原來的 Numpy 1.16.0 移除了, 改為安裝 plotnine 需要的 Numpy 1.19.4, 這可能造成 Tensflow 執行時出問題. 這種相依套件版本衝突的問題可用虛擬環境來解決. 

如果電腦無法連網或因為防火牆阻擋等原因導致安裝失敗, 則必須從連網電腦下載後再用 USB 複製過去用檔案離線安裝, 以安裝 plotnine 為例, 可先在 Pypi 網站下載檔案 : 




由圖可知 Pypi 提供 plotnine 的兩種安裝檔 : 上面那個是檔案型態為 wheel 的安裝包 (副檔名 .whl), 這是個二進位安裝檔不需編譯直接安裝 (速度較快), 但會與作業系統與 Python 版本有關, 故應下載環境相符之 wheel 檔才能正常安裝. 下面那個則是原始碼壓縮的安裝包 (副檔名 tar.gz,  .zip, 或 .tar 等), 安裝時會先解壓縮再編譯 (速度較慢). 

離線安裝指令是在 pip install 後面指定套件檔案路徑與名稱 :

pip install 套件安裝包檔案名稱   

例如 : 

pip install C:\Users\User\Downloads\plotnine-0.7.1-py3-none-any.whl   

有些套件若用在線方式一直無法順利安裝, 而 Pypi 網站又沒有提供 wheel 檔, 可以到加州大學爾灣分校流體力學實驗室的 Windows 二進位檔網站尋找, 下載適合之 wheel 檔下載 :


例如台股技術分析套件 TA-lib 的 wheel 檔如下 :




其中 cp38 表示適用於 CPython 版本 3.8, amd64 表示 64 位元的 Windows, 請選擇與電腦所安裝之 Python 版本相符之 wheel 檔, 否則無法安裝 (會出現版本不符訊息).


2. 顯示已安裝之套件列表 :

下列指令會顯示目前 Python 執行環境下已經安裝的套件與版本列表 :

 pip list    

例如 :

C:\Users\User>pip list    
Package                 Version
----------------------- -----------
-illow                  5.4.1
absl-py                 0.11.0
adafruit-ampy           1.0.7
appdirs                 1.4.4
astunparse              1.6.3
attrs                   19.3.0
backcall                0.1.0
beautifulsoup4          4.7.1
bleach                  3.1.0
bokeh                   2.2.3
cachetools              4.1.1
certifi                 2018.11.29
chardet                 3.0.4
Click                   7.0
colorama                0.4.1
control                 0.8.3
cycler                  0.10.0
Cython                  0.29.14
decorator               4.3.2
defusedxml              0.6.0
descartes               1.1.0
distlib                 0.3.1
Django                  1.11.27
django-contrib-comments 1.9.2
ecdsa                   0.13.2
eli5                    0.10.1
entrypoints             0.3
esptool                 2.6
filebrowser-safe        0.5.0
filelock                3.0.12
Flask                   1.1.1
........


3. 顯示某已安裝套件之資訊 :  

下列指令可顯示指定之已安裝套件資訊 :

pip show 套件名稱 

例如查詢數值運算套件 numpy 資訊 : 

C:\Users\User>pip show numpy    
Name: numpy
Version: 1.19.4
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: c:\python37\lib\site-packages
Requires:
Required-by: xgboost, torchvision, tensorflow, tensorboard, statsmodels, seaborn, scipy, scikit-learn, plotnine, patsy, pandas, opt-einsum, mizani, matplotlib, Keras-Preprocessing, h5py, gensim, eli5, control, bokeh

可見這些資訊包含作者, 目前安裝之版本, 套件摘要說明, 官網首頁, 以及哪些套件是基於此套件而建構的 (稱為相依套件) 等等. 


4. 移除已安裝之套件 : 

下列指令可移除已安裝之套件 :

pip uninstall 套件名稱   

例如移除圖片處理套件 pillow :

C:\Users\User>pip uninstall pillow   
Found existing installation: Pillow 8.0.1
Uninstalling Pillow-8.0.1:
  Would remove:
    c:\python37\lib\site-packages\pil\*
    c:\python37\lib\site-packages\pillow-8.0.1.dist-info\*
Proceed (y/n)? y
  Successfully uninstalled Pillow-8.0.1

移除前會用 Proceed 確認是否真的要移除. 

參考 : 


沒有留言 :