• Linux系统之路——python多版本共存问题(ps:自行切换python版本,pip安装遇到的一些问题)


    经常遇到这样的情况:

    • 系统自带的Python是2.6,自己需要Python 2.7中的某些特性;
    • 系统自带的Python是2.x,自己需要Python 3.x;

    此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存。 pyenv 就是这样一个Python版本管理器。

    安装pyenv

    $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    $ exec $SHELL -l

    安装Python

    查看可安装的版本

    $ pyenv install --list

    该命令会列出可以用pyenv安装的Python版本,仅列举几个:

    .7.8   # Python 2最新版本
    .4.1   # Python 3最新版本
    anaconda-4.0.0  # 支持Python 2.6和2.7
    anaconda3-4.0.0 # 支持Python 3.3和3.4

    其中形如 x.x.x 这样的只有版本号的为Python官方版本,其他的形如 xxxxx-x.x.x 这种既有名称又有版本后的属于“衍生版”或发行版。

    安装Python的依赖包

    在安装Python时需要首先安装其依赖的其他软件包,已知的一些需要预先安装的库如下。

    在CentOS/RHEL/Fedora下:

    sudo yum install readline readline-devel readline-static
    sudo yum install openssl openssl-devel openssl-static
    sudo yum install sqlite-devel
    sudo yum install bzip2-devel bzip2-libs

    安装指定版本

    使用如下命令即可安装python 3.4.1:

    $ pyenv install 3.4.1 -v

    该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包后重新执行该命令。

    如果网络不太好,用pyenv下载会比较慢,可以先执行该命令,然后到 ~/.pyenv/cache 目录下查看要下载的文件的文件名,然后自己到官方网站下载,并将文件放在 ~/.pyenv/cache 目录下(~/.pyenv/cache/ 一般需要手动创建)。pyenv会检查文件的完整性,若确认无误,则不会再重新下载。

    对于科研环境,更推荐安装专为科学计算准备的Anaconda发行版, pyenv install anaconda-4.0.0 安装Python 2.x版本, pyenv install anaconda3-4.0.0 安装Python 3.x版本;

    更新数据库

    安装完成之后需要对数据库进行更新:

    $ pyenv rehash

    查看当前已安装的python版本

    $ pyenv versions
    * system (set by /home/seisman/.pyenv/version)
    .4.1

    其中的星号表示当前正在使用的是系统自带的python。

    设置全局的python版本

    $ pyenv global 3.4.1
    $ pyenv versions
    system
    * 3.4.1 (set by /home/seisman/.pyenv/version)

    当前全局的python版本已经变成了3.4.1。也可以使用 pyenv local 或 pyenv shell 临时改变python版本。

    确认python版本

    $ python
    Python 3.4.1 (default, Sep 10 2014, 17:10:18)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    使用python

    • 输入 python 即可使用新版本的python;
    • 系统自带的脚本会以 /usr/bin/python 的方式直接调用老版本的python,因而不会对系统脚本产生影响;
    • 使用 pip 安装第三方模块时会安装到 ~/.pyenv/versions/3.4.1 下,不会和系统模块发生冲突。
    • 使用 pip 安装模块后,可能需要执行 pyenv rehash 更新数据库;
    • yenv version #显示当前使用的
    • Python pyenv which python #显示当前Python的安裝路径
    • pyenv global <version> #设置默认的Python版本
    • pyenv local <version> #在当前路径创建一个.python-version,以后进入这个目录自动切换为该版本
    • pyenv shell <version> #在当前shell的session中启用某个Python版本,优先级高于global,local

    参考https://github.com/yyuu/pyenv

    PS :我安装的centos版本是CentOS Linux release 7.2.1511 (Core) ,里面自带了python 2.7.5(但是没有自带pip,可以通过yum install python-pip进行安装,安装后的pip版本

      可能太低,如有需要pip install --upgrade pip);记得用sudo权限,否则可能会出错;而后我又通过pyenv安装了anaconda3-4.1.1。但是换了高版本的python,发现一些
             packages都安装不了,如何正确地切换python版本,可以通过命令



    1. 1.system就是系统自带的python2.7.5
      [suhong@localhost ~]$ pyenv versions
      * system (set by /home/suhong/.python-version)
      anaconda3-4.1.1

        

      2.切换至高版本

      [suhong@localhost ~]$ pyenv local anaconda3-4.1.1
      (anaconda3-4.1.1) [suhong@localhost ~]$ python
      Python 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 2 2016, 17:53:06) 
      [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>>

      3.切换至低版本

      (anaconda3-4.1.1) [suhong@localhost ~]$ pyenv local system
      [suhong@localhost ~]$ python
      Python 2.7.5 (default, Sep 15 2016, 22:37:39) 
      [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>> 

       
      4.切换低版本后发现python2.7.5没有pip

      1. 下载setuptools及pip的源码包
      	setuptools与pip都是python的模块
      	setuptools源码包: https://pypi.python.org/pypi/setuptools
      	pip源码包: https://pypi.python.org/pypi/pip#downloads
      2. 安装setuptools与pip
      目前下载的版本是setuptools-12.0.5.tar.gz与pip-6.0.6.tar.gz
      用tar命令解压, 格式:tar -xzvf xxxx.tar.gz
      用cd打开该文件夹,格式:cd xxxx
      用python命令安装,格式:python setup.py install  

      3.本来照理在python安装package用命令格式:pip install xxxx
      但出现错误,例如:pip install ipython
      出现错误:
      Exception:
      Traceback (most recent call last):
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py", line 215, in main
          status = self.run(options, args)
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/commands/install.py", line 317, in run
          prefix=options.prefix_path,
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_set.py", line 742, in install
          **kwargs
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_install.py", line 831, in install
          self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_install.py", line 1032, in move_wheel_files
          isolated=self.isolated,
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/wheel.py", line 346, in move_wheel_files
          clobber(source, lib_dir, True)
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/wheel.py", line 317, in clobber
          ensure_dir(destdir)
        File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/utils/__init__.py", line 83, in ensure_dir
          os.makedirs(path)
        File "/usr/lib64/python2.7/os.py", line 157, in makedirs
          mkdir(name, mode)
      OSError: [Errno 13] Permission denied: '/usr/lib64/python2.7/site-packages/pygments'

      后来发现是权限问题,应该用“sudo pip install xxxx”,结果问题迎刃而解

      5.安装scrapy,出现一些问题

      compilation terminated.
      error: command 'gcc' failed with exit status 1

       用安装Python模块出现error: command 'gcc' failed with exit status 1 ,明明装了gcc的,怎么会不行呢,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,然后谷歌了一下,先后安装了python-devel,libffi-devel后还是不行,最后发觉要安装openssl-devel才行

      可如下命令行安装:

      yum install gcc libffi-devel python-devel openssl-devel

      6.pip install MySQL-python(出现
      EnvironmentError: mysql_config not found)

       解决办法:安装包MySQL-devel-5.1.7-0.i386.rpm
                    MySQL-shared-5.1.7-0.i386.rpm
       后,再次进行install就解决了

      机智的我只用了sudo yum install MySQL-devel就解决了

  • 相关阅读:
    寒江独钓(0):内核开发上机指导
    异常:Hibernate数据库恢复错误
    天书夜读:从汇编语言到Windows内核编程笔记(4)
    企业WEBGIS网站解决方案
    如何使用国际开源项目构建一个完整的GIS(地理信息)应用系统
    将指定文件夹下的所有文件copy到目标文件夹下
    一些jquery的小知识
    压缩指定目录下指定文件(包括子目录下的文件)
    解压一个rar文件
    关于下载txt文本文挡的问题
  • 原文地址:https://www.cnblogs.com/Yiutto/p/5962906.html
Copyright © 2020-2023  润新知