<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          避坑-編譯安裝 Python 時(shí)遇到無(wú)法構(gòu)建 SSL

          共 4126字,需瀏覽 9分鐘

           ·

          2024-05-27 07:00

          然有了 docker,為啥還需要編譯安裝 Python 呢,是不是自找麻煩。 docker 是方便,但是如果機(jī)器本身就自帶 Python 最新版本,作為一個(gè)開(kāi)發(fā)環(huán)境,豈不更方便?

          筆者編譯安裝過(guò)不下 10 次,每次還是被這個(gè)錯(cuò)誤浪費(fèi)不少時(shí)間,今天就總結(jié)一下,讓你在編譯安裝 Python 的過(guò)程中避坑。

          步驟 1: 安裝依賴(lài)

          在編譯 Python 之前,你需要確保你的系統(tǒng)安裝了所有必須的構(gòu)建依賴(lài)。在基于 Debian 的系統(tǒng)上,像 Ubuntu 這樣的,可以這樣做:

          sudo apt update
          sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev \
          libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

          對(duì)于基于 Red Hat 的系統(tǒng),比如 CentOS 或者 Fedora,可以這樣做:

          sudo yum groupinstall "Development Tools"
          sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel \
          sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

          步驟 2: 下載 Python 源碼

          可以從 Python 官方網(wǎng)站或其在 GitHub 的鏡像庫(kù)下載源碼。使用 wget 從官方源下載的命令:

          wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz

          然后解壓下載的文件:

          tar -xvzf Python-3.12.3.tgz

          解壓后,切換到源碼目錄:

          cd Python-3.12.3

          步驟 3: 配置編譯選項(xiàng)

          在編譯之前,配置安裝選項(xiàng),可以使用 ./configure 腳本??梢灾付ㄖT如安裝目錄的選項(xiàng)(通過(guò) --prefix 參數(shù))和編譯優(yōu)化(在 Python 3.12,通過(guò) --enable-optimizations 開(kāi)啟編譯優(yōu)化可能會(huì)顯著提升 Python 性能但是會(huì)使編譯過(guò)程更長(zhǎng))。

          ./configure --enable-optimizations --prefix=/usr/local/python3.12

          這里,我們將 Python 安裝到 /usr/local/python3.12,然后手動(dòng)添加 Path,這樣不會(huì)影響其他版本的 Python,比如 python2.

          還有許多其他的配置選項(xiàng),可以通過(guò)運(yùn)行 ./configure --help 來(lái)查看它們。

          步驟 4: 編譯 Python

          運(yùn)行 make 命令來(lái)編譯 Python:

          make -j 8   # '8' 是編譯時(shí)使用的核心數(shù),根據(jù)你的系統(tǒng)調(diào)整

          由于編譯時(shí)間較長(zhǎng),我們可以使用 -j 選項(xiàng)會(huì)在編譯時(shí)進(jìn)行并行處理,以加快編譯速度。這個(gè)數(shù)字最好設(shè)置為你的處理器核心數(shù)。

          到這里,我們通常會(huì)遇到 ssl 報(bào)錯(cuò):

          Could not build the ssl module!
          Python requires a OpenSSL 1.1.1 or newer

          而操作系統(tǒng)上的 openssl 通常都是低于 1.1.1 的,遇到這種情況,就 openssl 官網(wǎng)下載新版本,編譯安裝,然后把相關(guān)的庫(kù)收集到安裝路徑的 lib 目錄即可。但是安裝 openssl 通常也不是那么順利的。根據(jù)以下步驟進(jìn)行

          mkdir ~/openssl
          cd ~/openssl
          wget https://www.openssl.org/source/openssl-3.3.0.tar.gz
          tar -zxvf openssl-3.3.0.tar.gz
          cd openssl-3.3.0
          ./config --prefix=/usr/local/ssl3.3 --openssldir=/usr/local/ssl3.3 shared zlib
          make
          make install

          如果上述步驟在 config 步驟報(bào)錯(cuò):Can't locate IPC/Cmd.pm in @INC ,則需要安裝下面的依賴(lài)包:

          sudo yum groupinstall 'Development Tools'
          sudo yum install perl-core zlib-devel

          上述的步驟將 openssl 安裝在 /usr/local/ssl3.3 下面,我們可以在命令行(terminal)執(zhí)行 /usr/local/ssl3.3/bin/openss version 如果執(zhí)行報(bào)錯(cuò),則需要指定 lib64 的路徑 :

          sudo vim sudo vim /etc/ld.so.conf.d/openssl.conf
          # 加入內(nèi)容 /usr/local/ssl3.3/lib64
          sudo ldconfig

          然后在執(zhí)行 /usr/local/ssl3.3/bin/openss version 即可看到正確的版本信息。

          但是編譯 Python 之前,還有一個(gè)關(guān)鍵的步驟,就是需要在 /usr/local/ssl3.3/ 下創(chuàng)建一個(gè) lib 文件,然后將相應(yīng)的 so 文件放進(jìn)去,通過(guò)執(zhí)行下面的命令:

          cd ~/openssl/openssl-3.3.0 # 確保再解壓的目錄中
          mkdir /usr/local/ssl3.3/lib
          cp ./*.{so,so.3*,a,pc} /usr/local/ssl3.3/lib

          步驟 5: 再次配置、編譯 Python

          運(yùn)行 make 命令來(lái)編譯 Python:

          ./configure --with-openssl=/usr/local/ssl3.3 --prefix=/usr/local/python3.12
          make -j 8   # '8' 是編譯時(shí)使用的核心數(shù),根據(jù)你的系統(tǒng)調(diào)整

          這次就可以順利完成編譯了。

          步驟 6: 安裝 Python

          一旦編譯完成,運(yùn)行以下命令以安裝 Python:

          sudo make install

          我們不需要使用 altinstall 是因?yàn)槲覀冎付俗约旱陌惭b目錄 /usr/local/python3.12。如果不指定安裝目錄,為了避免替換掉系統(tǒng)的默認(rèn) Python 版本,可以使用 altinstall

          步驟 6: 驗(yàn)證安裝

          安裝完成后,可以通過(guò)調(diào)用新安裝的 Python 版本來(lái)檢查它:

          /usr/local/bin/python3.12 --version

          輸出應(yīng)該顯示 Python 的版本號(hào)。進(jìn)入 Python 后,執(zhí)行 import ssl 驗(yàn)證安裝。

          $ /usr/local/python3.12/bin/python3
          Python 3.12.3 (main, May 23 202415:08:26) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
          Type "help""copyright""credits" or "license" for more information.
          >>> import ssl
          >>> ssl.OPENSSL_VERSION
          'OpenSSL 3.3.0 9 Apr 2024'
          >>>

          至此完成安裝。

          參考鏈接

          https://stackoverflow.com/questions/53543477/building-python-3-7-1-ssl-module-failed

          以上以上,如有幫助歡迎點(diǎn)贊關(guān)注轉(zhuǎn)發(fā),遇到問(wèn)題也可以聯(lián)系微信 somenzz-enjoy。

          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲天堂网2024 | 国产又黄又大又粗的视频 | 亚洲日韩免费视频 | 影音先锋内射麻豆 | a 在线观看免费 |