經常遇到這樣的情況:
- 系統自帶的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版本;
查看當前已安裝的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.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沒有pip1. 下載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就解決了