國產化設備鯤鵬CentOS7上源碼安裝Python3.7的過程詳解

具體編譯過成與正常的Python源代碼在x86平臺上的過程無異,此篇隨筆僅當用作復制黏貼的備忘錄。不得不說在一個老舊系統上安裝一個老舊的Python版本,從頭編譯一個Python還是一個較為穩健的選擇。

獲取源代碼

Python官網處下載所需源碼版本[https://www.python.org/downloads/source/]

curl -O https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz

準備工作(安裝依賴)

其實依賴不裝全也是能夠順利編譯完成的,隻不過在make階段會放棄部分組件的構建如壓縮算法和ssl,tk一類的組件,但是有條件還是建議裝全咯。

yum install -y gcc make
yum install -y openssl openssl-devel openssl-static bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel expat-devel tk tk-devel tcl tcl-devel libffi libffi-devel

生成Makefile

這邊主要註意下幾個參數,–enable-shared生成動態依賴庫(非必要),–prefix 指定Python安裝目錄(務必指定,尤其在有多個python環境下的時候,你也不想覆蓋瞭系統自帶的Python導致系統組件如yum一類的掛掉),–enable-optimizations(優化參數非必要)。還有就是,如果你的openssl安裝到瞭其他目錄或是有多openssl的環境請使用–with-openssl=DIR指定你使用的openssl版本,這在低版本操作系統下構建高版本python時非常重要,已centos7為例子它自帶的openssl-1.0.2不足以用於構建Python3.10(python3.10需要openssl 1.1.1以上),但是貿然的修稿系統的openssl版本會導致其餘依賴程序的崩潰,所以你隻能在特定目錄下安裝openssl並使用。

# 解壓源碼包
tar zxvf Python-3.7.13.tgz && cd Python-3.7.13
# 生成Makefile
./configure --enable-shared --prefix=/usr/local/python3.7 --enable-optimizations

構建&&安裝

有一說一在鯤鵬這種主頻較低的cpu上編譯著實挺慢的

make && make install

添加環境變量

echo 'export PATH="$PATH:/usr/local/python3.7.3/bin"' >> /etc/profile

其他小問題

找不到libpython3.7m.so.1.0

[[email protected] Python-3.7.13]# python3
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

把libpython3.7m.so.1.0放到系統能找到的地方便是

# 在編譯的目錄下
cp -f libpython3.7m.so.1.0 /lib64

升級pip上的小坑

如果你要保證在多python環境下(python2和python3共存)下升級pip,建議使用

curl https://bootstrap.pypa.io/get-pip.py | python3

來升級,已保證升級過程不會錯誤的調用python2

影響pyinstaller打包後python程序移植性的因素

除瞭cpu的架構,操作系統位數以外不談(這些太容易被註意瞭),指的註意的是glib版本。如果你的編譯環境有升級內核的行為導致glibc版本被改變瞭,高版本的打包後程序是無法在低版本的glibc系統上運行的(反過來沒問題)。所以如果想讓打包的程序在盡可能多的操作系統上運行請在低版本的glibc上構建你的程序,這邊有一個建議的組合centos5.8+python3.6.1,應該是一個較為極限的組合瞭,glibc版本2.5。 你要問咋看?ldd –version一下就成。

到此這篇關於國產化設備鯤鵬CentOS7上源碼安裝Python3.7的文章就介紹到這瞭,更多相關CentOS7源碼安裝Python3.7內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!

推薦閱讀: