CentOS下升级python版本

源码安装python

  • 安装python源码所依赖的工具及依赖的库

    yum install -y make gcc gcc-c++
    yum install -y bzip2 bzip2-devel
    yum install zlib-devel openssl openssl-devel -y
    yum install -y make xz
    
  • 下载安装python源码

    从官方网站或者华为镜像源下载所有需的源码包,此处以Python-2.7.10.tar.xz为例.

    wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz
    yum -y install make xz
    xz -d Python-2.7.10.tar.xz
    tar xvf Python-2.7.10.tar
    cd Python-2.7.10
    ./configure --enable-shared
    make
    make install
    

    make install can overwrite or masquerade the python3 binary. make altinstall is therefore recommended instead of make install since it only installs exec_prefix/bin/pythonversion.

  • 通过下面命令可以查看安装包的路径

    $ python -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
    /usr/lib/python2.7/site-packages
    $ python -c "import os; print os.__file__"
    /usr/lib64/python2.7/os.pyc
    $ python -c "import sys; print sys.executable"
    /usr/bin/python
    
  • 其他配置

    • 解决python运行时找不到动态库的问题

      echo "/usr/local/lib" >> /etc/ld.so.conf  # 将/usr/local/lib添加到/etc/ld.so.conf文件末尾
      ldconfig
      
    • 工具yum使用的原版的python,在这里需要处理。
      vi /usr/bin/yum

      将第一行的#!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6

  • python升级脚本

    #!/bin/bashFILE_DIR=$(cd "$(dirname "$0")"; pwd)function upgrade_python {# 安装编译python源码必须的工具yum -y install wget xz yum -y install gcc gcc-c++yum -y install make automake autoconfyum -y install bzip2 bzip2-devel bzip2-libs zlib-develyum -y install openssl openssl-develyum -y install bind-utils# 下载python源码包[ -e Python-2.7.11.tar.xz ] || wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xzxz -k -d Python-2.7.11.tar.xztar xvf Python-2.7.11.tarcd Python-2.7.11./configure --enable-sharedmakemake installcd "${FILE_DIR}"# 解决Python运行时找不到动态库的问题echo "/usr/local/lib" > /etc/ld.so.conf.d/python2.7.confldconfig# yum工具默认依赖python2.6,需要修改sed -i '1s/python$/python2.6/' /usr/bin/yum# 备份/usr/bin/python,连接到新安装的python版本上mv /usr/bin/python{,_bk}ln -s /usr/local/bin/python /usr/bin/python# 安装pip工具wget https://bootstrap.pypa.io/get-pip.py -O - | python
    }upgrade_python
    
  • python -c "import sysconfig; print(sysconfig.get_config_vars(\"CONFIG_ARGS\"))"可以查看python的配置参数

Sat Mar 6 17:48:27 CST 2021 CentOS7 Python3.8.8

yum install gcc gcc-c++ make pkgconfig
yum install libffi-devel zlib-devel xz-devel bzip2-devel readline-devel sqlite-devel ncurses-devel gdbm-devel openssl-devel expat-devel libtirpc-devel libuuid-devel
CXX=/usr/bin/g++ ./configure --prefix=/usr/local/python388 --with-ssl-default-suites=openssl
make -j 4
make altinstall
ls /usr/local/python388/bin/
# 2to3-3.8  easy_install-3.8  idle3.8  pip3.8  pydoc3.8  python3.8  python3.8-config

工具包安装及使用

打包工具setuptools

  • 功能:Easily download, build, install, upgrade, and uninstall Python packages
  • 具体安装方法请自行参考:https://pypi.python.org/pypi/setuptools#downloads
  • 官网倡导的安装方法:wget https://bootstrap.pypa.io/ez_setup.py -O - | python

此包给用户使用的easy_install工具,安装需要的包简单易用,开发者发布包的所需指导。

  • The EasyInstall user’s guide and reference manual
  • The setuptools Developer’s Guide
  • The pkg_resources API reference
  • The Internal Structure of Python Eggs

包安装工具pip

  • 功能:The PyPA recommended tool for installing Python packages
  • wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | python
  • pip主页地址:https://pypi.python.org/pypi/pip#downloads
  • 源码安装
    wget  https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196tar
    zxvf pip-7.1.2.tar.gz
    cd pip-7.1.2
    python setup.py install
    

安装后的工具path:PythonXX/Scripts,在window下有必要将此路径加入环境变量path中

使用pip:

  • pip --help 查看pip的帮助文档
  • pip list 查看已安装的packages
  • pip install xlrd 安装xlrd,用于处理Excel的packages
    其他应用请参照pip帮助

Python自动文档工具pydoc

首先认识一条比较重要的命令
python -m mod 作为脚本运行mod库,if name == 'main’是作为脚本运行的部分.

  • python -m SimpleHTTPServer 6666 #简单一个命令搭建目录服务器
  • 查看math库手册 python -m pydoc math
  • 查看函数手册 python -m pydoc math.asin
  • 开启本地手册服务器,可以再网页上查看所有的库函数手册,感觉十分强大 python -m pydoc -p port

python2脚本转化为python3脚本的工具2to3

python是中十分强大的语言,但它的高速发展,也给广大开发这带来许多困惑,python3并不兼容python2
Python3x/Tools/Scripts/2to3.py

#test.py
def greet(name):print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)

C:/Python34/Tools/Scripts/2to3.py -w test.py

#test.py
def greet(name):print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)

这里可以看到2to3后的变化
pirnt函数函数调用的方式使用,raw_input替换成了input

详细转换请参照python3的手册以及http://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html

参考

  • http://www.aiplaypc.com/31.html
  • Python Developer’s Guide¶
  • [https://devguide.python.org/setup/#build-dependencies](Install dependencies)
  • Common build problems

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下confstr与uname函数_获取C库与内核信息

#include <stdio.h> #include <sys/utsname.h> //unameint main(int argc, char **argv[]) {struct utsname u;if (uname(&u) ! -1) {printf("获取当前内核的名称和信息如下\n""sysname:%s\n""nodename:%s\n""release:%s\…

linux下getrlimit与sysconf函数

#include <stdio.h> #include <sys/time.h> #include <sys/resource.h>int main(int argc, char *argv[]) {struct rlimit nofile_rlmt;if (getrlimit(RLIMIT_NOFILE, &nofile_rlmt) ! -1) {printf("获取进程最大能打开的文件描述符个数信息:\n&quo…

Linux下environ环境变量操作函数

#include <stdio.h>int main(int argc,char *argv[],char **envptr) {int i0;for(i0; envptr[i]!NULL; i)printf("%s\n",envptr[i]);return 0; } main函数是程序的入口函数,int main(int argc,char *argv[]); argc是程序参数的个数,argv保存参数 与下边的程…

Linux网络编程--聊天室客户端程序

聊天室客户端程序 #define _GNU_SOURCE 1 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <string.h&…

二叉树学习之二叉查找树

写在前面的话 最近接到几个大学同学研究生毕业不是签华为就是签百度,本人取经得到:操作系统、数据结构与算法、网络编程与数据库是面试中利器。想想自己工作2.5年月薪还不到10K,过着苦逼的码农生活,而他们一出校门就是大放光芒(最起码进入的公司就让人觉得牛逼哄哄的).本人痛定…

二叉树学习之非递归遍历

二叉树递归遍历可谓是学过数据结构的同仁都能想一下就能写出来,但在应聘过程我们常常遇到的是写出一个二叉树非递归遍历函数,接着上篇文章写二叉树的非递归遍历,先难后易,一步一步的来. 先上代码: #include "binarytree.h" #include <stack> #include <queu…

二叉树学习之堆排序

认识堆是从堆排序开始的 二叉堆是完全二叉树或者是近似完全二叉树,堆存储在数组中: 根结点下标为0时,下标为n的元素的子结点下标分别为2*n1,2*n2,其父结点下标为(n-1)/2 二叉堆的特性: 1、父结点的键值总是>(<)任何一个子结点的键值 2、每个结点的左右子树都是二叉堆…

步入github世界

在源码的世界里&#xff0c;越来越多的优秀源码涌现&#xff0c;开源的世界不但代表他的优秀&#xff0c;也代表了他优秀的传播途径。 https://github.com/ github自从2008年现世&#xff0c;可谓是后来者居上。开源代码的公开库&#xff0c;优秀程序员的博客园&#xff0c;热心…

libevent学习__学习历程总结

The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts.环境搭建 下载: http:…

redis☞ python客户端

安装 https://pypi.python.org/pypi/redis/ https://github.com/andymccurdy/redis-py 参照官网,安装命令 sudo pip install redis 或者 sudo easy_install redis 亦或 源码包执行sudo python setup.py install实例 >>> import redis >>> r redis.Redis(ho…

Catalan数应用

Catalan数应用 Catalan数应用原理卡特兰数经典应用括号化买票找零组合数与阶乘计算 卡特兰数又称卡塔兰数&#xff0c;是组合数学中一个常出现在各种计数问题中的数列。由以比利时的数学家欧仁查理卡塔兰 (1814–1894)命名。 其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430,…

统计整数n的二进制表示中1的个数

(1)逐位判断&#xff08;位运算&#xff09;int counter_ones(unsigned n){int counter 0;While (n) {counter n&1;n >>1;}return counter;}(2)一个整型不为0&#xff0c;那么二进制表示时&#xff0c;至少包含一位1。如果整数减去1&#xff0c;那么最右边的1变成0…

百度2015校园招聘软件开发笔试题及答案

简单题&#xff08;本题共30分&#xff09; 请简述Tcp-ip的3次握手以及4次挥手过程&#xff1f;并解释为何关闭连接需要4次挥手(10分) 详细答案参见TCP/IP协议三次握手与四次握手流程解析 TCP三次握手、四次挥手过程如下: 通常情况下&#xff0c;一个正常的TCP连接&#xf…

python常见数据结构

Python中常见的数据结构可以统称为容器&#xff08;container&#xff09;。序列&#xff08;如列表和元组&#xff09;、映射&#xff08;如字典&#xff09;以及集合&#xff08;set&#xff09;是三类主要的容器。 一、序列&#xff08;列表、元组和字符串&#xff09; 序列…

理解‘*‘,‘*args‘,‘**‘,‘**kwargs‘

原文Understanding ‘*’, ‘*args’,’**‘and’**kwargs’ 刚开始学习python的时候&#xff0c;对有关args,kwargs,*和**的使用感到很困惑。相信对此感到疑惑的人也有很多。我打算通过这个帖子来排解这个疑惑(希望能减少疑惑)。 让我们通过以下5步来理解&#xff1a; 通过…

MongoDb随笔,PyMongo简单使用

安装MongoDb 【更新2021-07-06】 https://www.mongodb.com/try/download/community 下载对应系统的软件版本&#xff08;CentOS7.9 mongod 4.4.6&#xff09;rpm -ivh mongodb-org-server-4.4.6-1.el7.x86_64.rpm安装服务systemctl start mongod启动服务rpm -ivh mongodb-org…

python中classmethod与staticmethod的差异及应用

类中三种函数的应用 #!/usr/bin/env python # -*- coding: utf-8 -*-class TClassStatic(object):def __init__(self, data):self.data datadef printself(*arg):# for item in arg:# print item.dataprint("printself: ", arg)staticmethoddef smethod(*arg):prin…

python3元类简介(metaclass)

在Python中可以用内置函数type查看对象的类型&#xff0c;isinstance查看某个对象是某个类实例&#xff0c;通过type可以实现动态类&#xff0c;以及通过metaclass实现动态类 type()与isinstance()判断对象类型 Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v…

linux ps 命令使用

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。 linux上进程有5种状态 ps命令使…

UML序列图总结

序列图主要用于展示对象之间交互的顺序。 序列图将交互关系表示为一个二维图。纵向是时间轴&#xff0c;时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时&#xff0c;角色用一条虚线表示&#xff0c;当对象的过程处于激活…