博客 / 詳情

返回

Linux下Python3.9任意目錄快速編譯安裝和配置上手實用指南

日期 作者 版本 備註
2022-10-06 dingbinthu@163.com V1.0

本文敍述在Linux Centos7系統下,在任意非標準目錄(意味着不需要root或sudo權限)通過官方源碼包編譯安裝Python3.9的快速安裝指南。

因編譯安裝Python3.9可能需要安裝一些前置依賴庫如openssl,readline等,安裝這些雖然也可以逐一下載源碼編譯安裝,但略顯繁瑣,因此還是推薦通過yum 使用root或sudo權限一鍵安裝前置依賴項。(因此又必須需要root或sudo權限)。當然如果你的系統這些前置依賴項都安裝過了就不需要安裝了因此還是可以不需要root或sudo權限的。

1. Yum一鍵安裝前置依賴項

sudo yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel openssl openssl-devel  openssl-static xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel tk tk-devel libffi libffi-devel

2. 下載Python 3.9 官方源碼包

去https://www.python.org/downloads/ 下載Python 3.9.15 的源碼包,百度雲盤鏈接地址 。下載後的Python-3.9.15.tgz大約25M很小。

注意:我們還常常去pypi.org 官網上去下載python庫。後面會簡單敍述python如何在下載pypi.org上的庫文件後執行安裝操作的。

3. Linux下編譯安裝Python 3.9

cd ${TMP_DIR}
tar zxvf Python-3.9.15.tgz
cd Python-3.9.15
./configure  --enable-shared  --enable-optimizations CFLAGS=-fPIC --prefix=${INSTALL_DIR}
make
make install

這裏加上--enable-shared和-fPIC之後可以將python3的動態鏈接庫編譯出來,一般是libPython.so,大概10-30M,生成的Python可執行程序的運行依賴於這個動態庫。如果不指定改選項編譯完成後則會生成一個libPython.a,生成的Python可執行程序就完全包好了該.a的全部內容就不依賴與該.a靜態庫了。但是如果編譯第三方庫需要python接口的比如caffe等,則會報錯,所以這裏建議加上上面的--enable-shared和-fPIC參數。注意: 如果哪天你要講python可執行程序拷貝到別的機器,切記要連帶上拷貝這個libPython.so.xxx。它的位置就在python安裝目標目錄下的lib目錄下。--enable-optimizations 選項一般建議加上,它可以使得python執行時增速10%左右。

全程大約5-8分鐘即可編譯安裝完畢。

4.Python可用初始配置

python3.9編譯安裝好之後,要到可用或好用狀態,還需要如下初始配置。

4.1 .bashrc環境變量配置

注意:默認的python3高版本之後生成的可執行程序被命令為了python3 或pip3. 必須 為期建立python 和pip的軟連接。如下操作:
cd ${INSTALL_DIR}/bin
ln -sf python3 python
ln -sf pip3 pip

接着在~/.bashrc中添加如下環境變量:

export  PYTHON39_HOME=${INSTALL_DIR}
export  PATH=${PYTHON39_HOME}/bin:${PATH}                       #使得python pip等可執行命令能被找到
export  LD_LIBRARY_PATH=${INSTALL_DIR}/lib:${LD_LIBRARY_PATH}   #使得libPython.so.xx等庫能被找到

export  VIRTUALENVWRAPPER_PYTHON=${PYTHON39_HOME}/bin/python    #virtualenv-wrapper 使用的python解釋器
export  WORKON_HOME=${HOME}/.venv.2022                          #virtualenv-wrapper使用python 配置根目錄
source  ${PYTHON39_HOME}/bin/virtualenvwrapper.sh              #使得mkvirtualenv/workon/deactivate/                                                                      cpvirtualenv/lsvirtualenv/                                                                                cdvirtualenv/rmvirtualenv等命令能被找到

以上後面3行是virtualenvwrapper虛環境有關的環境變量和source設置,留待後面詳細解釋。

重新source ~/.bashrc後,執行如下命令,顯然正常即表示設置有效。

第一次source 可能會報錯-bash: /xxx/python39/bin/virtualenvwrapper.sh: No such file or directory,沒關係,因為這時候virtualenvwrapper還沒有安裝,待下面操作安裝好virtualenvwrapper之後這個文件自然就有了。
which python
which pip
python -V
pip -V

4.2 pip升級和配置

默認的python3.9這樣的新版本Python已經默認自帶安裝了pip工具。因此已經不需要額外獨立安裝pip了。有關 pip要做的事情只有:

4.2.1 設置pip配置文件

mkdir ~/.pip    #是pip默認配置文件的所在目錄,不存在要創建
vim ~/.pip/pip.conf 設置如下內容
注意windows 下該配置文件通常是C:\Users\<用户名>\pip\pip.ini
#~/.pip/pip.conf 內容
[global]
timeout = 10000
index-url=https://pypi.douban.com/simple
extra-index-url=https://mirrors.aliyun.com/pypi/simple/
#extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
#extra-index-url=http://pypi.mirrors.ustc.edu.cn/simple/

[install]
trusted-host=pypi.douban.com
#trusted-host=mirrors.aliyun.com
#trusted-host=pypi.tuna.tsinghua.edu.cn
#trusted-host=pypi.mirrors.ustc.edu.cn

4.2.2 升級pip如果不是最新版本的話。

#注意執行此命令之前一定要保證:which python 指向的是剛才安裝的python位 置,才意味着升級的該位置下的pip,否則可能升級了本機其他位置的pip。
python -m pip install --upgrade pip

4.3 virtualenvwrapper安裝和配置

python虛擬環境有很多,這裏推薦使用強大的virtualenvwrapper。

4.3.1 安裝virtualenvwrapper

注意:首次使用pip install 會報錯找不到pbr,pbr是新一代python打包管理工具,相當於是setuptools的升級換代產品。雖然我們可以不用它,但我們還是需要一鍵安裝 pbr。(就如同java打包我們可以繼續使用maven而不使用新一代gradle一樣)。
#安裝pbr ,安裝完之後${PYTHON39_HOME}/bin/pbr 可執行程序會被生成;${PYTHON39_HOME}/lib/python3.9/site-packages下也會生成pbr相關的包。
pip install pbr    

#安裝virtualenvwrapper,安裝完之後${PYTHON39_HOME}/bin下會新生成virtualenv, virtualenv-clone,virtualenvwrapper.sh, virtualenvwrapper_lazy.sh 4個文件。${PYTHON39_HOME}/lib/python3.9/site-packages下也會生成virtualenvwrapper相關的包。
pip install virtualenvwrapper  
注意: windows環境下需要執行的是pip install virtualenv virtualenvwrapper-win,安裝好後windows下只需要在PATH中設置 WORKON_HOME環境變量即可,其他不需要設置。

4.3.2 配置virtualenvwrapper

在~/.bashrc添加如下3行有關virtualenvwrapper 配置如下:

export  VIRTUALENVWRAPPER_PYTHON=${PYTHON39_HOME}/bin/python    #virtualenv-wrapper 使用的python解釋器
export  WORKON_HOME=${HOME}/.venv.2022                          #virtualenv-wrapper使用python 配置根目錄
source  ${PYTHON39_HOME}/bin/virtualenvwrapper.sh              #使得mkvirtualenv/workon/deactivate/                                                                      cpvirtualenv/lsvirtualenv/                                                                                cdvirtualenv/rmvirtualenv等命令能被找到

重新source ~/.bashrc ,source ${PYTHON39_HOME}/bin/virtualenvwrapper.sh 就不會再報錯找不到了。此時virtualenvwrapper相關的命令就可以使用了。

注意:virtualenvwrapper 相關命令如mkvirtualenv雖然可以使用,但若執行which mkvirtualenv時仍然找不到,因為它們是python函數。可以用 type -a mkvirtualenv 找到該命令的函數實現。

4.3.3 virtualenvwrapper 用法概述

virtualenvwrapper 作為極其強大的python虛擬環境,其常規用法一定要熟練使用。 如下:

命令 含義和用法
mkvirtualenv mkvirtualenv -p /path/to/python --copies venv-test1
創建-p執行的python解釋器對應的包環境作為虛擬環境包配置的python新的虛擬環境名為venv-test1. --copies 表示新虛擬環境是拷貝而不是鏈接源python解釋器內的命令和包。--copies推薦必須帶上該選項。
workon workon 列舉所有虛環境名稱,作用同lsvirtualenv
workon venv-test1
進入venv-test1虛環境,workon和其他很多命令一樣支持tab鍵候選存在的全部的虛擬環境名稱列表
deactivate 在某個虛擬環境內部時執行此命令可退出當前虛環境
lsvirtualenv 列舉所有虛環境名稱
rmvirtualenv rmvirtualenv venv-test1
刪除venv-test1虛環境
cdvirtualenv cdvirtualenv
必須在某個虛環境內部時執行此命令,可以直接進入到它的徐環境根目錄下
cpvirtualenv cpvirtualenv venv1 venv2
拷貝虛環境venv1 為venv2

5. python 如何安裝.whl和 .egg文件

egg文件是easy_install 即setuptools 包的對應python工程文件壓縮包標準,是上一代的,whl文件是pip對應的壓縮包標準,是用來替代egg文件的,兩者現在都在用。Whl文件用的更多。在python第三方庫中,除了源碼和二進制exe之外,.whl文件和.egg文件也是兩種常用的文件類型。

.whl文件 現在常見的一種二進制格式, 首先需要安裝wheel庫

pip install wheel

然後下載所需的.whl文件,最後用pip命令在.whl文件所在的位置安裝,例如:

pip install h:/path/xxx.whl

.egg文件 是一種打包,後綴名可以改成rar,直接解壓縮,按照源碼的形式安裝,即:

cd到.egg文件解壓縮後的根目錄下,執行
python setup.py install   #這就是所謂源碼形式安裝

.egg文件還可以通過easy_install命令安裝如下:(不過新版本的python 3.X裏已經沒有easy_install命令了,也就沒必要再使用這個命令了。)

easy_install  /xx/xx.egg

還有一種最簡單的安裝方法就是把egg文件和egg文件解壓出來的文件夾直接複製到Python的第三方庫文件夾..Lib\site-packages中

6. python -m 和 python 直接運行的區別

python -m 和 python 直接運行的區別現象如下:

>>> python xxx.py # 直接運行
>>> python -m xxx # 相當於import,叫做當做模塊來啓動

主要區別在於sys.path不同,直接運行會將該腳本所在目錄添加至sys.path,而當做模塊啓動則會將當前運行命令的路徑添加至sys.path。

實際應用中假設我們有如下文件結構:

package1/

|--__init__.py

|--mod1.py

package2/

|--__init__.py

|--run.py

在run.py中import了mod1.py

# run.py

from package1 import mod1

python run.py # 失敗,提示找不到package1

# 切換到package2 所在目錄

python -m package2.run # 成功

7. python項目跨機器遷移方案

當然,python虛擬環境只是隔離過個python項目的依賴庫的最重要的方式之一,但如果是跨機器遷移python項目,我們推薦的做法還是如下:

  1. 在目標機器上源碼編譯安裝同版本或相近版本python源碼包。
  2. 在源機器上python項目對應的虛擬環境中執行pip freeze > requirements.txt 生成依賴包文件 requirements.txt
  3. 在目標機器上生成新的python虛環境,然後倒入源機器生成的requirements.txt文件,執行pip install -r requirements.txt

需要説明的是,如果是同機器上遷移或拷貝python項目,可選的方案如下:(推薦方案1和3)

  1. 使用cpvirtualenv
  2. 或者直接拷貝python虛環境項目
  3. pip freeze/install -r 凍結和新導入依賴庫文件requirements.txt
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.