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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM