26.Python3升級之后導致yum安裝的ansible無法使用

背景:
被控端(包括管理端区岗,客戶端谨娜,被管理端)的python升級到新版本之后洼哎,使用ansible報錯
內網(wǎng)機器無法連接網(wǎng)絡酸茴,需要使用pip離線安裝的方式
原因:
默認使用yum安裝的ansible是基于python2.7版本分预,很多功能指令都是調用python完成的,默認情況下會調用/usr/bin/python下的版本薪捍。
python升級至新的版本之后笼痹,會增加新的模塊、特性酪穿,調用方式也不一樣凳干。
因此,每個版本的python升級之后被济,都需要將ansible升級至對應的版本救赐,直接使用pip install ansible即可。

關鍵詞:
內網(wǎng)環(huán)境
離線安裝升級openssl
離線安裝升級openssh
離線安裝升級python
離線安裝升級ansible
pip安裝升級
ModuleNotFoundError: No module named '_ctypes'

提示:
以下操作均使用root賬戶操作

一只磷、本地升級測試

(一)经磅、要求:

1.找一臺自己的虛擬機(隨便一臺)泌绣,可以聯(lián)網(wǎng)就行
2.環(huán)境一致(操作系統(tǒng)大版本);

(二)预厌、開始安裝升級

1.先安裝升級openssl阿迈,因為升級python需要依賴openssl(pip需要使用)

# 安裝一些依賴包
yum -y install gcc make
# 個人習慣將源碼包保存目錄
cd /usr/local/src
# 下載包
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
# 解壓
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w/
# 環(huán)境檢查,如果缺少那個就安裝那個
./config --prefix=/usr/local/ssl --shared
# 編譯安裝轧叽,沒有出現(xiàn)error錯誤就不要管
make && make install
# 庫文件
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
# 查看版本
ldconfig -v

升級成功之后苗沧,可以將編譯好的openssl-1.1.1w打包到內網(wǎng)機器上,等下直接make install即可炭晒。

cd /usr/local/src
tar cf openssl-1.1.1w-make.tar openssl-1.1.1w

2.安裝升級python3

此方法試用源碼包安裝或者升級

# 先行解決依賴
yum -y install libffi-devel

# 源碼包放置目錄
cd /usr/local/src
# 下載源碼包崎页,根據(jù)需求
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
# 解壓
tar xf Python-3.12.0.tgz
cd Python-3.12.0/
# 環(huán)境檢查,需要添加`--with-openssl`選項腰埂,寫正常路徑,不然等下`pip`安裝軟件報錯
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/ssl
# 編譯安裝
make && make install

添加二進制文件到環(huán)境變量所識別的路徑里

# 這些都是自帶的舊版本的軟鏈接文件蜈膨,刪除沒有影響
rm -rf   /usr/bin/pip
rm -rf   /usr/bin/python
# 給剛剛編譯生成的可行性二進制文件創(chuàng)建軟鏈接
# /bin 目錄是usr/bin 目錄的軟件屿笼,都是同一個目錄
ln -s /usr/local/python3/bin/pip3  /usr/bin/pip
ln -s /usr/local/python3/bin/python3  /usr/bin/python3
ln -s /usr/local/python3/bin/python3  /usr/bin/python
# 查看版本
python -V
# 安裝成功

3.驗證以及細節(jié)處理

# 查看相關模塊是否正常
# ansible命令依賴這個模塊,這一步?jīng)]有成功翁巍,往后也是白做
# 正確安裝之后的輸出如下
[root@centos7 Python-3.12.0]# python
Python 3.12.0 (main, Dec 21 2023, 11:33:45) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
>>> 
# 安裝成功驴一,但是缺少必要的模塊
[root@centos7 ~]# python
Python 3.12.0 (main, Nov 21 2023, 10:49:41) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named '_ctypes'
>>> 
# 出現(xiàn)這種的建議重新編譯安裝,查看系統(tǒng)環(huán)境缺少的依賴灶壶,比如libffi-devel軟件包

# 將編譯好的Python3源碼包打包肝断,等下在內網(wǎng)機器直接`make install`
tar cf Python-3.12.0-make.tar Python-3.12.0

python升級后,會導致yum不可用的解決辦法

注意:因為升級python版本驰凛,會導致yum命令無法直接使用胸懈,可以修改命令腳本的第一行,指明要使用舊python作為解釋器

# 兩個文件都需要修改
sed -i 's/python/python2.7/g' /usr/bin/yum
sed -i 's/python/python2.7/g' /usr/libexec/urlgrabber-ext-down

不然后報以下的錯誤:

[root@centos7 ~]# yum -y install libffi-devel
  File "/bin/yum", line 30
    except KeyboardInterrupt, e:
           ^^^^^^^^^^^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized

[root@centos7 ~]# yum makecache 
已加載插件:langpacks, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

base                                                                                                    | 3.6 kB  00:00:00     
extras                                                                                                  | 2.9 kB  00:00:00     
http                                                                                                    | 3.0 kB  00:00:00     
updates                                                                                                 | 2.9 kB  00:00:00     
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
           ^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
           ^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
           ^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
           ^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
           ^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized


由于用戶取消而退出
[root@centos7 ~]# 

(三)恰响、使用pip安裝ansible

注意:先確保本地安裝的ansible能使用趣钱,所以本地也要安裝嘗試

# 本地升級pip,-i指定要使用的源
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
# 下載升級pip所需要的離線包胚宦,等下要拿到內網(wǎng)機器上升級
pip download pip -d /root/pip-upgrade -i https://mirrors.aliyun.com/pypi/simple/

# 本地使用pip安裝ansible(這種方式安裝會適應python版本)
pip install ansible -i https://mirrors.aliyun.com/pypi/simple/

# 安裝好的ansible會保存在跟pip命令所在的目錄
ll /usr/local/python3/bin/ansible*

# 可以做個軟鏈接
ln -s /usr/local/python3/bin/ansible /bin/ansible
ln -s /usr/local/python3/bin/ansible-playbook /bin/ansible-playbook

# 下載安裝ansible所需要的離線包首有,等下要拿到內網(wǎng)機器上升級
pip download ansible -d /root/pip-ansible -i https://pypi.tuna.tsinghua.edu.cn/simple

# 打包帶走
cd /root/
tar cf pip-ansible.tar pip-*
#下載pip和ansible離線包
#sz pip-ansible.tar

(四)、注意事項

問題一:

pip3 install 時報錯“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.”

原因:
pip命令需要使用openssl進行安全連接枢劝,安裝python的時候環(huán)境缺少openssl

解決辦法:
方法一:
可以使用yum命令安裝直接安裝相關軟件包:

# 這種方法安裝的一般是低版本的openssl井联,也沒影響
yum -y install openssl*
# 或者
yum -y install gcc libffi-devel zlib* openssl-devel libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

方法二:
源碼包編譯安裝openssl

具體操作看上面的步驟
不過在安裝python的時候需要添加 "--with-openssl=/usr/local/ssl"

問題二:

使用pip安裝ansible之后,查看ansible版本提示:
ERROR: No module named '_ctypes'

# pip安裝ansible之后查看版本操作
[root@centos7 ~]# ansible --version
ERROR: No module named '_ctypes'

原因:
這個錯誤通常表示在您的Python環(huán)境中缺少_ctypes模塊您旁。
_ctypes是Python內置模塊烙常,用于與C語言進行交互。

解決辦法:
確認_ctypes模塊是否存在:請檢查您的Python安裝中是否存在_ctypes模塊被冒【啵可以在命令行中嘗試導入它來確認它是否存在轮蜕。
在Python交互式解釋器中輸入以下命令:

[root@centos7 Python-3.12.0]# python
Python 3.12.0 (main, Dec 21 2023, 11:33:45) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import _ctypes
>>> 

更新或重新安裝Python:如果上述方法都無效,您可以嘗試更新或重新安裝Python蝗锥。

二跃洛、內網(wǎng)機器上操作

(一)、上傳安裝包

# 安裝包目錄
cd /usr/local/src/
ll *.tar
# 解壓
tar xf openssl-1.1.1w-make.tar
tar xf Python-3.12.0-make.tar
tar xf pip-ansible.tar -C /root/

(二)终议、安裝openssl

安裝包必須是第一大點打包的包

cd /usr/local/src/openssl-1.1.1w/
# 直接安裝就好
make install
# 注意看umask值汇竭,不然普通用戶沒有權限使用openssl命令,需要手動修改權限
chmod -R 755 /usr/local/ssl
# 寫入鏈接庫文件
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
# 使鏈接庫生效
ldconfig -v
# 創(chuàng)建軟鏈接
''mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
''mv /usr/local/bin/openssl /usr/local/bin/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/local/bin/openssl
# 查看版本
openssl version

(三)穴张、安裝python

cd /usr/local/src/Python-3.12.0/
# 直接安裝
make install
# 刪除原先的版本
rm -rf   /usr/bin/pip
rm -rf   /usr/bin/python3
rm -rf   /usr/bin/python
# 創(chuàng)建新版本的軟鏈接
ln -s /usr/local/python3/bin/pip3  /usr/bin/pip
ln -s /usr/local/python3/bin/python3  /usr/bin/python3
ln -s /usr/local/python3/bin/python3  /usr/bin/python
# 查看版本
python -V

(三)细燎、升級pip

cd /root/
# pip離線升級
pip install --no-index  --ignore-installed /root/pip-upgrade/*
pip -V

(四)、安裝ansible

# pip離線安裝ansible
pip install --no-index --find-links=/root/pip-ansible/ --ignore-installed /root/pip-ansible/*
# 創(chuàng)建軟鏈接
ln -s /usr/local/python3/bin/ansible /bin/ansible
ln -s /usr/local/python3/bin/ansible-playbook /bin/ansible-playbook

# 查看ansible版本是否符合python版本
ansible --version

(五)皂甘、測試ansible

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末玻驻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偿枕,更是在濱河造成了極大的恐慌璧瞬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐夸,死亡現(xiàn)場離奇詭異嗤锉,居然都是意外死亡,警方通過查閱死者的電腦和手機墓塌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門瘟忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苫幢,你說我怎么就攤上這事访诱。” “怎么了态坦?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵盐数,是天一觀的道長。 經(jīng)常有香客問我伞梯,道長玫氢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任谜诫,我火速辦了婚禮漾峡,結果婚禮上,老公的妹妹穿的比我還像新娘喻旷。我一直安慰自己生逸,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著槽袄,像睡著了一般烙无。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍尺,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天截酷,我揣著相機與錄音,去河邊找鬼乾戏。 笑死迂苛,一個胖子當著我的面吹牛,可吹牛的內容都是我干的鼓择。 我是一名探鬼主播三幻,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呐能!你這毒婦竟也來了念搬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摆出,失蹤者是張志新(化名)和其女友劉穎锁蠕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懊蒸,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年悯搔,在試婚紗的時候發(fā)現(xiàn)自己被綠了骑丸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡妒貌,死狀恐怖通危,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情灌曙,我是刑警寧澤菊碟,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站在刺,受9級特大地震影響逆害,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蚣驼,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一魄幕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颖杏,春花似錦纯陨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咙轩。三九已至,卻和暖如春阴颖,著一層夾襖步出監(jiān)牢的瞬間活喊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工膘盖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胧弛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓侠畔,卻偏偏與公主長得像结缚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子软棺,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容