python 2.7.6環境搭建

爲什麼寫腳本

每次用新的機器,都要把python的環境給安裝一遍~so,這是一件很操蛋的問題,就shell練手寫了一個code,嘿嘿,渣渣技術~html

測試環境

我愛vagrant,一條命令直接還原成乾淨的測試環境,大愛啊~java

腳本以下:

#!/bin/bash
# Auther: zhuima
# Date:   2014-06-26
# Function: create python env
#


REVTAL=0

# import Functions 

. /etc/rc.d/init.d/functions

# check network

. /etc/sysconfig/network

if [ $NETWORKING = 'no' ];then
    exit $REVTAL
fi

# install epel yum source

function epel_install(){
    if rpm --version &>/dev/null;then
        rpm -ivh  http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    else
        exit $REVTAL
        print "please checking your yum configure!"
    fi
}


# install base packages

function base_packages(){
     if yum repolist &>/dev/null;then
         yum install yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel patch -y
     else 
         exit $REVTAL
         print "please checking your yum configure!"
     fi
}


# install pip

function pip_install(){
    if yum repolist &>/dev/null;then
        yum install python-pip -y
    else
        exit $REVTAL
            print "please checking your yum configure!"
        fi
}

# install ipython

function ipython_install(){
    if yum repolist &>/dev/null;then
        yum install ipython -y
    else
    exit $REVTAL
        print "please checking your yum configure!"
    fi
}

# install pyenv    

function pyenv_install(){
    if git --version  &>/dev/null;then
        cd /`whoami` && git clone git://github.com/yyuu/pyenv.git .pyenv  
    else
        yum install git -y
        cd /`whoami` && git clone git://github.com/yyuu/pyenv.git .pyenv  
    fi
}

# setting pyenv env

function pyenv_env(){

echo 'export PYENV_ROOT=$HOME/.pyenv' >> /etc/profile
echo 'export PATH=$PYENV_ROOT/bin:$PATH' >> /etc/profile
#echo 'eval $(pyenv init -)' >> /etc/profile

# exec pyenv.sh
if [ -e /etc/profile ];then
    source  /etc/profile
else
    echo "Files is not exists"
    exit $REVTAL
fi

}

# install python 2.7.6

function python_install(){
    if pyenv versions &>/dev/null;then
        pyenv install 2.7.6
    else
        exit $REVTAL
        print "please checking your pyenv configure"
    fi
}

# install ansible

function install_ansible(){
    if pip --version &>/dev/null;then
        pip install ansible
    else
        yum install pip -y
        pip install ansible
    fi

}

while :;do
cat << EOF
+-------------------------------------------+
|一、Install epel_install                    |
|二、Install base_packages                   |
|三、Install pip_install                     |
|四、Install ipython_install                 |
|五、Install pyenv_install                   |
|六、Install pyenv_env                       |
|七、Install python2.7.6_install             |
|八、One-Click Setup                         |   
|九、[Q|q|quit] to quit                      |
+-------------------------------------------+
EOF

read -p "select which one packages you want to install: " choice

case $choice in
    1)
      epel_install
      ;;
    2)
      base_packages
      ;;
    3)
      pip_install
      ;;
    4)
      ipython_install
      ;;
    5)  
      pyenv_install
      ;;
    6)
      pyenv_env
      ;;
    7)
      python2.7.6_install
      ;;
    8)
      epel_install
      base_packages
      pip_install
      ipython_install
      pyenv_install
      pyenv_env
      python_install
          source /etc/profile
      ;;
    Q|q|quit)
      exit $REVTAL
      ;;
    *)
      echo "Usage: select one number(1|2|3|4|5|6|7|8|9)"
      exit $REVTAL
      ;;
esac
done

關於腳本中使用. 仍是source的問題

source filename 與 sh filename 及./filename執行腳本的區別在那裏呢?
1.當shell腳本具備可執行權限時,用sh filename與./filename執行腳本是沒有區別得。./filename是由於當前目錄沒有在PATH中,全部"."是用來表示當前目錄的。
2.sh filename 從新創建一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell,除非使用export。
3.source filename:這個命令其實只是簡單地讀取腳本里面的語句依次在當前shell裏面執行,沒有創建新的子shell。那麼腳本里面全部新建、改變變量的語句都會保存在當前shell裏面。python

來源: http://www.blogjava.net/jjshcc/archive/2012/12/12/392904.htmlgit

關於環境變量配置文件:

1.Linux的變量種類
  按變量的生存週期來劃分,Linux變量可分爲兩類:
  1.1 永久的:須要修改配置文件,變量永久生效。
  1.2 臨時的:使用export命令聲明便可,變量在關閉shell時失效。
  2.設置變量的三種方法
  2.1 在/etc/profile文件中添加變量【對全部用戶生效(永久的)】
  用VI在文件/etc/profile文件中增長變量,該變量將會對Linux下全部用戶有效,而且是「永久的」。
  例如:編輯/etc/profile文件,添加CLASSPATH變量
  # vi /etc/profile
  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
  注:修改文件後要想立刻生效還要運行# source /etc/profile否則只能在下次重進此用戶時生效。
  2.2 在用戶目錄下的.bash_profile文件中增長變量【對單一用戶生效(永久的)】
  用VI在用戶目錄下的.bash_profile文件中增長變量,改變量僅會對當前用戶有效,而且是「永久的」。
  例如:編輯guok用戶目錄(/home/guok)下的.bash_profile
  $ vi /home/guok/.bash.profile
  添加以下內容:
  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
  注:修改文件後要想立刻生效還要運行$ source /home/guok/.bash_profile否則只能在下次重進此用戶時生效。
  2.3 直接運行export命令定義變量【只對當前shell(BASH)有效(臨時的)】
  在shell的命令行下直接使用[export 變量名=變量值] 定義變量,該變量只在當前的shell(BASH)或其子shell(BASH)下是        有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,須要使用的話還須要從新定義。
  3.環境變量的查看
  3.1 使用echo命令查看單個環境變量。例如:
  echo $PATH
  3.2 使用env查看全部環境變量。例如:
  env
  3.3 使用set查看全部本地定義的環境變量。
  unset能夠刪除指定的環境變量。
  4.經常使用的環境變量
  PATH 決定了shell將到哪些目錄中尋找命令或程序
  HOME 當前用戶主目錄
  HISTSIZE 歷史記錄數
  LOGNAME 當前用戶的登陸名
  HOSTNAME 指主機的名稱
  SHELL   當前用戶Shell類型
  LANGUGE  語言相關的環境變量,多語言能夠修改此環境變量
  MAIL   當前用戶的郵件存放目錄
  PS1   基本提示符,對於root用戶是#,對於普通用戶是$github

來源: http://285118.blog.51cto.com/275118/1174676sql

後記

bug:因爲每次都是su切換到root帳戶的,因此/etc/profile中pyenv的環境變量不生效,須要從新source下才行,這也是一個小bug~shell

緣由:.pyenv文件在root帳戶家目錄下,而PATH中添加的是當前$HOME/.pyenv/bin,除了root家目錄下有.pyenv以外,普通用戶家目錄下沒有,因此就致使pyenv的環境變量不生效的問題~bash

解決辦法:
su切換的時候使用 su - 便可python2.7

PS:ide

     實際生產環境中,可能是在普通用戶下建立.pyenv文件夾的,因此這個問題也不是問題了

相關文章
相關標籤/搜索