代碼同時兼容 python 2.7 和 python 3

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# python2 中定義普通字符將自動識別為unicode,要放到文件開頭
from __future__ import unicode_literals

try:#python2
    from UserDict import UserDict
    #建議按照python3的名字進行import
    from UserDict import DictMixin as MutableMapping
except ImportError:#python3
    from collections import UserDict
    from collections import MutableMapping


# 解析 ini
try:
   import ConfigParser as configparser
except ImportError:
   import configparser


# 打印某個變量的寫法
print("ENDPOINT: {} ".format(ENDPOINT))

#報錯: TypeError: cannot use a string pattern on a bytes-like object
s = s.decode('utf8')

說明:

  1. 關于版本:2.6 版本太老,已被淘汰。2.7 屬于過渡版本, 3.x 則屬于未來。
  2. 3.6 的性能不錯,同時還增加了原生的異步庫 asyncio ,值得研究。
  3. 3.0 里面,把 print 改成了函數,要注意。
  4. http url lib 推薦使用 urllib 和 requests 。
  5. 升級版本
    CentOS 6 自帶 python 2.6,如果升級到 2.7,可能會引起某些系統組件依賴問題。
    CentOS 6 安裝 python 3.6, 對系統基本無影響,比升級到 python 2.7 ,對系統影響最小。
python=3.6.8
test -f Python-${python}.tar.xz || wget -c https://www.python.org/ftp/python/${python}/Python-${python}.tar.xz
tar Jxf Python-${python}.tar.xz
cd Python-${python}
EXTRATESTOPTS=--list-tests
./configure --enable-optimizations --prefix=/usr/local
make -j8
sudo make install 

CentOS 7 的 epel 倉庫,可以安裝

yum install -y python36-devel python36-setuptools 
easy_install-3.6 pip
ln -s /bin/python3.6 /bin/python3
  1. python 3 常用的庫, 安裝的目錄在 /usr/local/lib/3.6
pip3 install -U httpie requests mongo redis psutil pymysql stomp.py python3-memcached  virtualenv paramiko sh pycurl ipython pyyaml httpie mysqlclient pymemcache cx_Oracle

  1. 制作 RPM 包
APP=python36
VERSION=3.6.8
PREFIX=/usr/local
fpm -s dir -t rpm -n ${APP} -v ${VERSION} --epoch 0 --rpm-user=root \
-p ${APP}-${VERSION}.rpm \
$PREFIX/bin/2to3 $PREFIX/bin/idle3 $PREFIX/bin/pip3 $PREFIX/bin/pydoc3 \
$PREFIX/bin/python3 $PREFIX/bin/python3-config  $PREFIX/bin/pyvenv \
$PREFIX/bin/*3.6  $PREFIX/include/python3.6m \
$PREFIX/lib/libpython3.6m.a $PREFIX/lib/python3.6 $PREFIX/lib/pkgconfig/python-3*.pc \
$PREFIX/lib/pkgconfig/python3*.pc $PREFIX/share/man/man1/python3.*



8. CentOS 7 安裝 python 3.10.4

注意:在 gcc 低版本(<8.1.0)下, ./configure 不能增加參數 --enable-optimizations,
否則會報 Could not import runpy module 錯誤,編譯失敗.
注意: 自帶的openssl 1.0.2版本太低,需要安裝epel 的 openssl11 版本,不安裝的話編譯后的python不支持 ssl 。
 
yum install epel-release
yum install gcc make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel openssl11-devel 

python=3.10.4
test -f Python-${python}.tar.xz || wget -c https://www.python.org/ftp/python/${python}/Python-${python}.tar.xz
tar Jxf Python-${python}.tar.xz
cd Python-${python}
sed -i 's/PKG_CONFIG openssl /PKG_CONFIG openssl11 /g' configure
./configure && make clean && make -j8 && sudo make altinstall
pip3.10 install requests

nfpm-python3.10.yml
---
name: "python3"
arch: "x86_64"
platform: "linux"
version: "3.10.4"
section: "default"
priority: "extra"
maintainer: "maintainer"
description: |
  python3.
vendor: "vendor"
license: "MIT"
contents:
- src: /usr/local/bin/*3.10*
  dst: /usr/local/bin/
- src: /usr/local/lib/python3.10/*
  dst: /usr/local/lib/python3.10/
- src: /usr/local/lib/libpython3.10.a
  dst: /usr/local/lib/libpython3.10.a
- src: /usr/local/lib/pkgconfig/python-3.10*
  dst: /usr/local/lib/pkgconfig/  
- src: /usr/local/include/python3.10/*
  dst: /usr/local/include/python3.10/
- src: /usr/local/bin/python3.10
  dst: /usr/local/bin/python3
  type: symlink
replaces:
  - python3-libs
  - python3-pip
  - python3-setuptools
depends:
  - openssl-devel
  - libffi-devel
  - zlib-devel
  - bzip2-devel
  - ncurses-devel
  - sqlite-devel 


nfpm package -p rpm -f nfpm-python3.10.yml

yum install python3-3.10.4*.rpm


# CentOS 8 及以上安裝 python 3.10.4
yum install openssl-devel  guile
./configure  --enable-optimizations && make clean && make -j8 && sudo make altinstall
pip3.10 install requests


參考:

http://python.jobbole.com/83987/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容