Linux系統之路——python多版本共存問題(ps:自行切換python版本,pip安裝遇到的一些問題)

常常遇到這樣的狀況:python

  • 系統自帶的Python是2.6,本身須要Python 2.7中的某些特性;
  • 系統自帶的Python是2.x,本身須要Python 3.x;

此時須要在系統中安裝多個Python,但又不能影響系統自帶的Python,即須要實現Python的多版本共存。 pyenv 就是這樣一個Python版本管理器。mysql

安裝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版本,僅列舉幾個:linux

.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 這種既有名稱又有版本後的屬於「衍生版」或發行版。git

安裝Python的依賴包

在安裝Python時須要首先安裝其依賴的其餘軟件包,已知的一些須要預先安裝的庫以下。github

在CentOS/RHEL/Fedora下:sql

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:shell

$ pyenv install 3.4.1 -v

該命令會從github上下載python的源代碼,並解壓到/tmp目錄下,而後在/tmp中執行編譯工做。若依賴包沒有安裝,則會出現編譯錯誤,須要在安裝依賴包後從新執行該命令。數據庫

若是網絡不太好,用pyenv下載會比較慢,能夠先執行該命令,而後到 ~/.pyenv/cache 目錄下查看要下載的文件的文件名,而後本身到官方網站下載,並將文件放在 ~/.pyenv/cache 目錄下(~/.pyenv/cache/ 通常須要手動建立)。pyenv會檢查文件的完整性,若確認無誤,則不會再從新下載。centos

對於科研環境,更推薦安裝專爲科學計算準備的Anaconda發行版, pyenv install anaconda-4.0.0 安裝Python 2.x版本, pyenv install anaconda3-4.0.0 安裝Python 3.x版本;bash

更新數據庫

安裝完成以後須要對數據庫進行更新:

$ 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就解決了

相關文章
相關標籤/搜索