[PY3]——環境配置(1)——pyenv | pip | ipython | jupyter(含安裝pyenv環境shell指令碼)

Jelly_lyj發表於2017-03-18

1.關於pyenv

(1)pyenv是一個開源的、shell指令碼編寫的工具;Simple Python version management

(2)為什麼使用pyenv:當多個專案同時在開發與維護時,各個專案可能使用著不同的python版本,使用pyenv能更方便幫助我們管理不同的python版本環境

(3)pyenv原始碼及其下載安裝皆可以在GitHub上找到:

     https://github.com/yyuu/pyenv

     https://github.com/yyuu/pyenv-installer

          

 


2.安裝pyenv

1. 安裝git

# yum -y install git

2. 安裝pyenv

# curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
    WARNING: seems you still have not added 'pyenv' to the load path.
    # Load pyenv automatically by adding
    # the following to ~/.bash_profile:
    export PATH="/root/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"

3. 其預設會安裝在家目錄的.pyenv下,我們可以檢視到pyenv命令其實是個連結檔案

# ls ~/.pyenv/
CHANGELOG.md  LICENSE    bin          libexec  shims  versions
COMMANDS.md   Makefile   cache        plugins  src
CONDUCT.md    README.md  completions  pyenv.d  test
# ll ~/.pyenv/bin/
total 0
lrwxrwxrwx 1 root root 16 Jan  4 10:52 pyenv -> ../libexec/pyenv

4. 配置環境變數, 在 `~/.bash_profile`裡增加如下內容

# vim ~/.bash_profile  
  export PATH="~/.pyenv/bin:$PATH"
  eval "$(pyenv init -)"
  eval "$(pyenv virtualenv-init -)"

5. 更新.bash_profile檔案或重新登入shell使之生效

# source ~/.bash_profile

6. 這時pyenv命令就可以直接使用了。驗證:

# pyenv
pyenv 1.0.6
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/yyuu/pyenv#readme

 7. 安裝pyenv環境的shell指令碼,注意執行這個指令碼需要用“source **.sh”的方式

#!/bin/bash

#title:configuration python(pyenv) environment
#author:Jelly_lyj
#date:2017-07-03
#version:v0.1

#========================
# Install depend package
#=========================
Ins_pac()
{
echo "Is about to start download depend on the package,please wait..."    
yum -y install git gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel &>/dev/null
if [ $? -eq 0 ]
then
    echo "All depend on the package installation is successful"
else
    echo "There is an error, please check"
fi
}

#==========================
# download & install pyenv
#========================== 
Ins_pyenv()
{
echo "downloading pyenv from github,please wait..."
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash &>/dev/null
if [ $? -eq 0 ]
then
echo "pyenv download successful"
else
echo "pyenv download error,please check"
fi
}

#===============================
# configuration path environment
#===============================
Conf_path()
{
sed -i '$i export PATH="~/.pyenv/bin:$PATH"\neval "$(pyenv init -)"\neval "$(pyenv virtualenv-init -)"'  ~/.bash_profile
source ~/.bash_profile
}

#==========================
# test pyenv
#========================== 
Test_pyenv()
{
    read -p "現在你可以輸入一下pyenv命令,看看是否安裝成功了:" py
    case $py in
    pyenv)
       pyenv  &>/dev/null
       if [ $? -eq 1 ]
       then
          echo "pyenv命令執行成功,pyenv安裝成功"
          echo "接下來你可以使用pyenv相關命令和選項操作管理你的python環境啦"
          exit
       else
          echo "沒有pyenv這個命令,pyenv沒有安裝成功"
       fi
    ;;
    *)
       echo "你咋連pyenv都輸錯了..."
       Test_pyenv
    ;;
    esac
}

#=========
# Main()
#=========
Main()
{
    Ins_pac
    Ins_pyenv
    Conf_path
    echo "Install and configuration done"
    Test_pyenv
}

#=========
# 程式入口
#=========
Main
Install_pyenv.sh

 


3. 使用pyenv安裝python

1. 安裝編譯工具與依賴

*centos環境:
# yum -y install gcc make patch
# yum -y install gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel

*ubuntu環境:
# apt-get -y install gcc make patch
# apt-get -y install libgdbm-dev libssl-dev libsqlite-dev libreadline-dev zlib1g-dev libbz2-dev

2. 安裝Python的命令:pyenv install

# pyenv install 3.5.2
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
......                                     //pyenv會從官網下載安裝包然後自行安裝,花的時間可能稍微會長一些

3. 如果上一步進行不下去的解決方法:可在.pyenv下新建cache目錄,並將自己下載的安裝包放在其中

# mkdir ~/.pyenv/cache
# ls ~/.pyenv/cache/
    Python-3.5.2.tar.xz
# pyenv install 3.5.2
Installing Python-3.5.2...
patching file Lib/venv/scripts/posix/activate.fish
Installed Python-3.5.2 to /root/.pyenv/versions/3.5.2

 


4. 使用pyenv管理python環境的常用命令

1. versions命令:檢視系統全部全部python版本

(1) 注意pyenv也會管理系統自帶的python
(2) *號所在的行表示當前目錄正在使用的python版本

# pyenv versions
* system (set by /root/.pyenv/version)
  3.5.2

 

2. local命令:切換Python版本

(1) 這是pyenv十分便利的地方,即可以針對目錄來設定python版本
(2) 應當注意:子目錄預設會繼承父目錄的版本
(3) 我們在某個目錄中使用了local命令,即會在此目錄下生成一個.python-version檔案,這裡就記錄目錄的python版本

//新建一個目錄py3
# mkdir /py3
//進入py3目錄我們可以檢視一下這個目錄下的當前python版本是什麼
# cd py3/
# python -V
Python 2.6.6
# pyenv versions
* system (set by /.python-version)  
  3.5.2
//使用local命令切換版本(這些命令tab都可以補全的)
# pyenv local 3.5.2
# python -V
Python 3.5.2s
# pyenv versions
  system
* 3.5.2 (set by /py3/.python-version)
//看看當前目錄下.python-version檔案的內容
# cat .python-version
3.5.2
//在py3下新建一個目錄看看它的版本
# mkdir /py3/workpace1
# cd workpace1/
# pyenv versions
  system
* 3.5.2 (set by /py3/.python-version)

 
3. global命令:切換全域性預設Python版本

 

4. virtualenv命令
(1) 理解虛擬環境的概念

//python中有很多的第三方包/庫
# ls ~/.pyenv/versions/3.5.2/lib/python3.5/site-packages/
README       easy_install.py  pip-8.1.1.dist-info  setuptools
__pycache__  pip              pkg_resources        setuptools-20.10.1.dist-info
//當多個專案都使用同一個python版本時,不同的專案可能會使用不同版本的第三方包,那麼這個問題該如何解決呢?
//故而引出了虛擬環境的概念
//虛擬環境的目的在於隔離,隔離第三方包,因為每個專案可能依賴相同的第三方包,但這些第三方包版本可能不一樣

(2)建立虛擬環境 `pyenv virtualenv $python_version $name`

//建立一個名為virtenvname的虛擬環境
# pyenv virtualenv 3.5.2 virtenvname
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/3.5.2/envs/virtenvname/lib/python3.5/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/3.5.2/envs/virtenvname/lib/python3.5/site-packages
//這是我們檢視versions目錄可以看到這個virtenvname"版本",可以看到這是個連結檔案
# ll ~/.pyenv/versions/
total 4
drwxr-xr-x 7 root root 4096 Jan  5 23:27 3.5.2
lrwxrwxrwx 1 root root   44 Jan  5 23:27 virtenvname -> /root/.pyenv/versions/3.5.2/envs/virtenvname
//檢視這個連結的目錄下的內容,我們可以看到virtenvname的第三方包
# ls  ~/.pyenv/versions/3.5.2/envs/virtenvname/lib/python3.5/site-packages/
__pycache__          pkg_resources
easy_install.py      setuptools
pip                  setuptools-20.10.1.dist-info
pip-8.1.1.dist-info
//虛擬環境就當做“一個版本”按平常的方法來使用即可
# pyenv versions
  system
* 3.5.2 (set by /py3/.python-version)
  3.5.2/envs/virtenvname
  virtenvname

 

5. uninstall命令:解除安裝某個版本, 包括虛擬環境

# pyenv uninstall virtenvname
pyenv-virtualenv: remove /root/.pyenv/versions/3.5.2/envs/virtenvname? y
# pyenv versions
  system
* 3.5.2 (set by /py3/.python-version)

 


pip工具

pip是一個Python包的管理工具

//更改pip源的方法(aliyun的快得飛起)
# mkdir /root/.pip
# vim /root/.pip/pip.conf
  [global]
  index-url=http://mirrors.aliyun.com/pypi/simple/
  trusted-host=mirrors.aliyun.com


ipython | jupyter工具

ipython是一個python互動shell的增強工具
jupyter是可以在web端使用python
(注:我的jupyter部署在雲伺服器上、系統為CentOS、瀏覽器為firefox)

//建立虛擬環境magedu1
[root@TXY_LYJ py3]# pyenv virtualenv 3.5.2 magedu1
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.yenv/versions/3.5.2/envs/magedu1/lib/python3.5/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/vrsions/3.5.2/envs/magedu1/lib/python3.5/site-packages
[root@TXY_LYJ py3]# pyenv local magedu1
//使用pip安裝ipython和jupyter
(magedu1) [root@TXY_LYJ py3]# pip install ipython
(magedu1) [root@TXY_LYJ py3]# pip install jupyter
//開啟ipython,為notebook遠端生成一個密碼
(magedu1) [root@TXY_LYJ py3]#ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:033c3e7745a6:......'
//修改jupyter的配置檔案
# cat /root/.jupyter/jupyter_notebook_config.py|egrep -v '^#|^$'
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:033c3e7745a6:......'

 

相關文章