Python為主流開發語言, 用python 開發的程序越來越多。 方便的是大多linux系統里面都默認集成了python, 開發可以隨時隨地開始。然而有部分發行版自帶的python版本偏低,因此我我們需要手動來安裝較新的版本。
以CentOS 6.x版本為例,自帶的python版本為2.6.x的,假如需要使用2.7版本的,需要手動編譯安裝。
1. 手動安裝python
1.1 編譯安裝Python 2.7
$ wget --no-check-certificate https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
$ tar xvf Python-2.7.11.tgz
$ cd Python-2.7.11
$ ./configure --prefix=/usr/local/python27
$ make
$ make install
$ mv /usr/bin/python /usr/bin/python26
$ ln -s /usr/local/python27/bin/python /usr/bin/python
$ python -V # 查看版本
1.2 解決YUM無法使用的問題
CentOS系統下的YUM依賴于系統自帶的python2.6版本,安裝高版本python后會導致YUM無法使用,此時需要修改下YUM的默認python配置版本。
$ vim /usr/bin/yum
#!/usr/bin/python26 # 首行#!/usr/bin/python 替換為老版本python
CentOS 5.x的Python版本為2.4.x;CnetOS 6.x的Python版本為2.6.x;CnetOS 7.x的Python版本為2.7.x
此時我們才算真正安裝完高版本的python,然而python的強大在于有許多優秀的第三方庫可供使用。對于眾多第三方庫的安裝與管理,python提供了一個類似YUM功能的包管理器PIP。
2. 包管理器Pip
2.1 安裝
使用包管理軟件安裝
- CentOS/RHEL
# 配置epel repo
$ sudo yum install python-pip
- Ubuntu
$ sudo apt-get install python-pip
pip官方安裝腳本
$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ python get-pip.py
pip編譯安裝
- 安裝setuptools
$ wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
$ tar zxvf setuptools-0.6c11.tar.gz
$ cd setuptools-0.6c11
$ python setup.py build
$ python setup.py install
- 安裝pip
$ wget https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#md5=01026f87978932060cc86c1dc527903e
$ tar zxvf pip-1.5.6.tar.gz
$ cd pip-1.5.6
$ python setup.py build
$ python setup.py install
- 加載環境變量
$ vim /etc/profile/py27.sh
export PATH=/usr/local/python27/bin:$PATH
$ . /etc/profile/py27.sh
2.2 pip常用命令
$ pip install Package # 安裝模塊包
$ pip list # 列出已安裝的包
$ pip list --outdated # 查看哪些軟件需要更新
$ pip show --files Package # 查看安裝包時安裝了哪些文件
$ pip show --files Package # 查看那些軟件需要更新
$ pip uninstall Package # 卸載軟件包
$ pip search Package # 搜索軟件包
$ pip install --upgrade/-U Package # 升級軟件包
2.3 pip示例
1.安裝具體版本軟件
$ pip install Package # latest version
$ pip install Package==1.0.4 # specific version
$ pip install Package>=1.0.4' # minimum version
2.Requirements文件安裝依賴軟件
Requirements文件
一般記錄的是依賴軟件列表,通過pip可以一次性安裝依賴軟件包:
$ pip freeze > requirements.txt # 導出
$ pip install -r requirements.txt # 安裝
3.查看軟件包信息
$ pip show pip
---
Name: pip
Version: 1.4.1
Location: /Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg
Requires:
$ pip show pyopencl
---
Name: pyopencl
Version: 2014.1
Location: /Library/Python/2.7/site-packages
Requires: pytools, pytest, decorator
4.升級軟件包
$ pip install -U requests # pip install --upgrade requests
Downloading/unpacking requests from https://pypi.python.org/packages/2.7/r/requests/requests-2.8.1-py2.py3-none-any.whl#md5=46f1d621daa3ab38958a42f51478b1ee
Downloading requests-2.8.1-py2.py3-none-any.whl (497kB): 497kB downloaded
Installing collected packages: requests
Found existing installation: requests 2.2.1
Not uninstalling requests at /usr/lib/python2.7/dist-packages, owned by OS
Successfully installed requests
5.搜索
$ pip search bs4
bs4 - This package is used for a typo squatting experiment for my
bachelors thesis. For more information, please visit http
://svs-repo.informatik.uni-hamburg.de/
zhihu-py3 - Zhihu UNOFFICIAL API library in python3, with help of bs4,
lxml, requests and html2text.
2.4 使用第三方源
基于某些原因,訪問國外站點的速度較慢,可以把鏡像源切換至國內,加快下載速度。
第三方源:
- 豆瓣:
http://pypi.douban.com/simple
- V2EX:
http://pypi.v2ex.com/simple
- 清華大學:
http://mirrors.tuna.tsinghua.edu.cn/pypi/simple
- 華中理工大學:
http://pypi.hustunique.com/
- 山東理工大學:
http://pypi.sdutlinux.org/
- 中國科學技術大學
http://pypi.mirrors.ustc.edu.cn/
使用鏡像源很簡單:
- 可以在命令行用-i指定
pip install -i http://<mirror>/simple <package>
e.g.
$ [sudo] pip install -i http://pypi.douban.com/simple/ flask
-
修改配置文件
- Linux:
$HOME/.pip/pip.conf
- Windows:
%HOMEPATH%\pip\pip.ini
默認情況下$HOME目錄的.pip目錄是不存在的,需要手動創建
- Linux:
以豆瓣源為例
$ mkdir $HOME/.pip
$ cat >> $HOME/.pip/pip.conf << EOF
[global]
index-url = https://pypi.douban.com/simple
EOF
這樣在使用pip來安裝時,會默認調用更換源的鏡像。
2.5 pip命令自動補全
對于Bash
$ pip completion --bash >> ~/.profile
$ . ~/.profile
對于zsh
$ pip completion --zsh >> ~/.zprofile
$ . ~/.profile
加載此配置文件后,則pip命令支持自動補全功能.
假如我們需要在一個系統下擁有多個python開發環境,此時我們就需要virtualenv。
virtualenv提供了一種功能,就是將一個目錄建立為一個虛擬的python環境,這樣的話,用戶可以建立多個虛擬環境,每個環境里面的python版本可以是不同的,也可以是相同的,而且環境之間相互獨立。
3. 虛擬沙盒virtualenv
virtualenv為應用提供了隔離的Python運行環境,解決了不同應用間多版本的沖突問題。
3.1 安裝
virtualenv也是python的一個第三方庫,因此可以用pip安裝,當然也可以選擇編譯安裝或YUM安裝(EPEL源)。
pip安裝方式
$ [sudo] pip install virtualenv
安裝最新開發版
$ [sudo] pip install https://github.com/pypa/virtualenv/tarball/develop
源碼安裝
$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
$ tar xvfz virtualenv-X.X.tar.gz
$ cd virtualenv-X.X
$ [sudo] python setup.py install
yum安裝方式
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
$ yum clean all
$ yum makecache
$ yum install python-virtualenv
3.2 使用方法
1.創建虛擬環境
$ virtualenv venv
該操作會創建env/lib/pythonX.X/site-packages
目錄和env/bin/python
,前者用來存放要安裝的模塊,后者就是隔離環境的Python解釋器。 在virtualenv環境下使用此解釋器(包括以 #!/path/to/ENV/bin/python 開頭的腳本)時,使用的都是隔離環境下的模塊。
該操作還在隔離環境下安裝了Setuptools
或distribute
。要用Distribue
取代setuptools
的話,只要運行:
$ python virtualenv.py --distribute venv
如果你的系統里安裝有不同版本的python,可以使用--python
參數指定虛擬環境的python版本:
$ virtualenv --python=/path/to/python venv
或
$ virtualenv -p /path/to/python venv
默認情況下虛擬環境不會依賴系統環境的global site-packages。如果想依賴系統環境的第三方軟件包,可以使用參數--system-site-packages
。
$ virtualenv --system-site-packages venv
2.激活虛擬環境
$ source venv/bin/activate
(venv) $
3.退出虛擬環境
$ deactivate
4.生成可打包環境
某些特殊需求下,可能沒有網絡, 我們期望直接打包一個venv, 可以解壓后直接使用, 這時候可以使用virtualenv -relocatable
指令將venv修改為可更改位置的venv
$ virtualenv --relocatable venv
pip用于python第三方包的安裝管理,virtualenv用于隔離python環境,當我們需要用到多個版本的時候,可以用多個隔離環境。但是,有牛人寫了個pyenv,它可以用來便捷的管理python的版本。
4. 版本管理器pyenv
pyenv是一個能簡易地在多個Python版本中進行切換的工具,它簡單而優雅。
它的美好之處在于,他并沒有使用將不同的$PATH
植入不同的shell這種高耦合的工作方式,而是簡單地在$PATH
的最前面插入了一個墊片路徑(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。
所有對Python可執行文件的查找都會首先被這個shims
路徑截獲,從而架空了后面的系統路徑。
pyenv有以下功能:
- 進行全局的Python版本切換
- 為單個項目提供對應的Python版本
- 使用環境變量能讓你重寫Python版本
- 能在同一時間在不同版本間進行命令搜索
擁有以下特點:
- 只依賴Python本身
- 將目錄添加進$PATH即可使用
- 能夠進行virtualenv管理
4.1 pyenv安裝
安裝依賴
- CentOS
$ sudo yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel bzip2-libs
- Ubuntu
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev
安裝pyenv
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
配置環境變量
- 官方提供的方法
$ echo -e '\npyenv' >>~/.bashrc
$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ source ~/.bashrc
- 也可以基于環境變量管理的方法
$ vim /etc/profile.d/pyenv.sh
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
$ . /etc/profile.d/pyenv.sh
重新載入profile之后,你就可以開始使用你的pyenv了,使用pyenv-installer安裝的pyenv,會幫助我們安裝幾個有用的插件,其中,最常用的有:
-
pyenv-virtualenv
用于整合virtualenv -
pyenv-pip-rehash
用于使用pip安裝包之后自動執行rehash -
pyenv-update
用于升級pyenv
4.2 pyenv常用命令
$ pyenv version # 查看當前系統使用的python版本
$ pyenv versions # 查看當前系統擁有的python版本
$ pyenv install 3.4.1 # 安裝3.4.1,可使用-v參數查看詳細輸出
$ pyenv uninstall 3.4.1 # 卸載
$ pyenv local 3.4.1 # local僅對當前目錄及子目錄生效,告訴當前目錄使用版本2.7.5,
$ pyenv global # 告訴全局環境使用某個版本,為了不破壞系統環境,不建議使用global設置全局版本
$ pyenv rehash # 重建環境變量,每當你增刪 Python 版本或帶有可執行文件的包(如 pip)以后,都應該執行一次本命令
4.3 pyenv示例
1.安裝python3.4.1
$ pyenv install 3.4.1
Downloading Python-3.4.1.tgz...
-> http://magedu-python.qiniudn.com/pythons/8d007e3ef80b128a292be101201e75dec5480e5632e994771e7c231d17720b66
Installing Python-3.4.1...
patching file ./Lib/ssl.py
patching file ./Modules/_ssl.c
Hunk #1 succeeded at 2014 (offset -2 lines).
Hunk #2 succeeded at 4066 (offset -7 lines).
Installed Python-3.4.1 to /home/will/.pyenv/versions/3.4.1
$ pyenv version
system (set by /home/will/test/.python-version)
$ pyenv versions
* system (set by /home/will/test/.python-version)
3.4.1
3.4.2
*表示當前的python版本;
$ ll ~/.pyenv/cache
-rw-rw-r-- 1 will will 19113124 Feb 25 18:02 Python-3.4.1.tar.gz
這里下載使用了別人的國內鏡像
http://magedu-python.qiniudn.com/pythons
,由于沒有更新,不做推薦。
下載前更改PYTHON_BUILD_MIRROR_URL
環境變量即可:
export PYTHON_BUILD_MIRROR_URL='http://magedu-python.qiniudn.com/pythons'
由于安裝包下載在
~/.pyenv/cache
后,不會重復下載。因此當速度慢時也可手動下載后放置在目錄下。使用pyenv安裝python會自動安裝pip
2.切換版本
$ pyenv local 3.4.1
$ pyenv version
3.4.1 (set by /home/will/test/.python-version)
$ mkdir will
$ cd will/
$ python -V
Python 3.4.1
當切換本地目錄的python版本后,對其目錄及子目錄生效
3.virtualenv
pyenv通過插件,可以很好的和virtualenv一起工作,通過整合virtualenv,pyenv實現了真正意義上的環境隔離,每個項目都相當于使用一個單獨的解釋器。
virtualenv的一般用法如下:
pyenv virtualenv [-f|--force] [-u|--upgrade] [VIRTUALENV_OPTIONS] <version> <virtualenv-name>
-
-f
表示強制的(假如虛擬環境已存在,將會覆蓋這個虛擬環境) -
-u
表示upgrade,用于修改已經存在的虛擬環境的Python版本 -
VIRTUALENV_OPTIONS
是傳遞給virtualenv的選項,可以通過virtualenv的幫助獲取選項的含義 -
version
表示Python版本 -
virtualenv-name
指定虛擬環境名
$ pyenv virtualenv 3.4.1 venv
Ignoring indexes: https://pypi.python.org/simple/
Requirement already satisfied (use --upgrade to upgrade): setuptools in /home/will/.pyenv/versions/3.4.1/envs/venv/lib/python3.4/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in /home/will/.pyenv/versions/3.4.1/envs/venv/lib/python3.4/site-packages
Cleaning up...
$ pyenv versions
system
* 3.4.1 (set by /home/will/test/.python-version)
3.4.1/envs/venv
3.4.2
venv
# 此時會看到一個venv跟3.4.1/envs/venv,查看可知venv是后者的一個軟鏈接
$ pyenv which python
/home/will/.pyenv/versions/3.4.1/bin/python
$ ll /home/will/.pyenv/versions
total 8
drwxr-xr-x 7 will will 4096 Feb 25 18:13 3.4.1
drwxr-xr-x 7 will will 4096 Feb 25 16:02 3.4.2
lrwxrwxrwx 1 will will 42 Feb 25 18:13 venv -> /home/will/.pyenv/versions/3.4.1/envs/venv
# 此時切換環境
$ pyenv local venv
pyenv-virtualenv: deactivate
pyenv-virtualenv: activate venv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(venv) $
(venv) $ cd -
pyenv-virtualenv: deactivate 3.4.1/envs/venv
$
$ cd test/
pyenv-virtualenv: deactivate
pyenv-virtualenv: activate venv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(venv) $
plug的virtual不用手動去激活環境;當把本地目錄與環境相關聯起來后,將自動激活虛擬環境,離開目錄時自動退出虛擬環境
4.刪除虛擬環境跟python版本
$ pyenv local system
$ pyenv virtualenv-delete venv
pyenv-virtualenv: remove /home/will/.pyenv/versions/3.4.1/envs/venv? y
$ pyenv versions
* system (set by /home/will/test/.python-version)
3.4.1
3.4.2
$ pyenv uninstall 3.4.1
pyenv: remove /home/will/.pyenv/versions/3.4.1? y
$ pyenv versions
* system (set by /home/will/test/.python-version)
3.4.2
這樣,管理python版本和使用python變得更為簡便。
5. 個人經驗
2017-04-18
此筆記是記錄初學python時,python相關工具的理解和常用實例,Windows,Linux,OS X系統下均有涉及。時過境遷,目前覺得較好的方案是使用vagrant構建系統開發環境,pyenv管理python環境,pip管理python包,vagrant便于移植環境到不同的操作系統,易保持開發環境的統一性。
關于vagrant可參考 使用 Vagrant 打造跨平臺開發環境