ubuntu系统中python版本升级

  • pip  ImportError: No module named _internal
python -m pip install --upgrade pip
  • 查看原版本信息
    [tmp@l22-240-142 ~]$ python -V
    Python 2.7.5
    [tmp@l22-240-142 ~]$ which python
    /bin/python
  • 下载依赖文件
    [tmp@l22-240-142 ~]$ apt-get build-dep python2.7
  • python官网下载需要的版本,此处以2.7.14为例,版本有两种压缩形式:Gzipped source tarball(.tgz) 和XZ compressed source tarball(.tar.xz),文件内容一样,.tar.xz文件占用空间小。下载并解压。
    [tmp@l22-240-142 ~]$ wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
    [tmp@l22-240-142 ~]$ time tar -xzf Python-2.7.14.tgz
  • 创建编译路径
    [tmp@l22-240-142 ~]$ mkdir -p /usr/local/python2.7.14
  • 编译并安装
    [tmp@l22-240-142 ~]$ ./configure --prefix=/usr/local/  –enable-shared CFLAGS=-fPIC 
    [tmp@l22-240-142 ~]$ make && make install >>make.log
  • 更新连接文件
    [tmp@l22-240-142 ~]$ cd /bin  #/bin目录为which python获得的python路径
    [tmp@l22-240-142 bin]$ mv python python2.7.5  
    [tmp@l22-240-142 bin]$ ln -s /usr/local/python2.7.14/bin/python python
  • 更新pip
    [tmp@l22-240-142 ~]$ wget https://bootstrap.pypa.io/get-pip.py
    [tmp@l22-240-142 ~]$ python get-pip.py

升级中遇到的问题

  • Q:python使用中缺少模块,如'bz2, _tkinter'等,这些模块是编译python时在系统中未找到对应模块,故没有参与编译。具体未编译的模块可查看日志make.log中获得如下提示。
Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _curses            _curses_panel
_sqlite3           _tkinter           bsddb185
dbm                dl                 gdbm
imageop            readline           sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

        A:尽管下载了部分依赖文件,可还是有模块没有下载。解决此问题的根本方法是查看未编译的模块,然后进行安装。注:不要忽视这些未编译的模块,后续使用中会因为没有编译该模块而重新编译python,然后是对应的安装pip,意味着所有已经安装的模块还需要重新安装。

  • Q:加载模块时报出如下错误。
can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libprotobuf.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

       A:编译时缺少配置项–enable-shared CFLAGS=-fPIC 

 

  • Q:编译文件夹中的python版本仍未旧的python版本

    A:此种情况多是由于系统中存在多个python,如/usr/bin/python, /usr/local/bin/python。可通过which python查看具体python路径,然后将/usr/local/python2.7.14/bin中的python连接到对应位置即可。

你可能感兴趣的:(开发周边)