2017年6月7日 星期三

在mac上安裝python3.x版本環境,用Homebrew和pyenv管理以及Sublime多版本控制

我的mac版本目前是 OS X Yosemite 10.10.5

基本上 python 在mac裡就有內建python 2.7

在學習python時,想利用python3.6的版本
所以就直接在官網上下載了3.6的版本
下載完後會有一個 IDLE還有 luncher
但是在終端機裡還是一樣是python2.7的版本

用Sublime Text 還是使用python2.7編譯
造成了些許的困擾
因此上網開始爬文怎麼管理多版本的python

正文開始

一開始先開啟終端機安裝 Homebrew 套件

Homebrew套件是mac的管理套件工具
https://brew.sh/index_zh-tw.html

安裝方式如下:


  1. 打開終端機
  2. 在bash層 輸入
    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. 依照指示,可能會請你輸入密碼安裝
  4. 最後安裝完成後 用 $ brew update 更新一下homebrew 

相關 homebrew的指令如下,可以找目前mac裡的安裝套件

  1.  $ brew search 套件名稱(在這邊可以試著打python)   ==> 搜尋套件
  2.  $ brew info 套件名稱  ==> 觀看套件資訊
  3.  $ brew install 套件名稱 ==> 安裝指定套件
  4.  $ brew list ==> 列出目前已下載的套件
  5.  $ brew update ==> 更新homebrew套件管理程式
homebrew的相關指令是參考此網址:


安裝完homebrew後,使用homebrew安裝pyenv這套管理python的工具

pyenv的好處是
  • 可以選擇整體環境下使用哪個python版本
  • 可以同時使用多個python的版本
  • 提供"全部"每一個python版本的控管和下載
  • 可以查詢在不同版本下的語法差異,對於開發者來說是很方便的事情

安裝方法就在終端機輸入 $brew install pyenv 

就可以安裝完成!

安裝後,要在bash_profile 加入幾行指令設定初始化和路徑(在官網上也說要加入)

eval "$(pyenv init -)"

官網的說明如下:
Add pyenv init to your shell to enable shims and autocompletion. Please make sure eval "$(pyenv init -)" is placed toward the end of the shell configuration file since it manipulates PATH during the initialization.

加入此行的方式如下:
  1. 打開終端機
  2. 依次輸入:
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
  3. 最後重啟shell,輸入 $ exec $SHELL 即可
註:一開始安裝時我也忘記輸入,變成無法改變global python的版本
變成 我在終端機上
輸入 $python3 才能執行3.6版本的IDLE了
輸入 $ python 會執行 python2.7(內建版本)


但只要將這幾行指令寫入後,重啟之後,只要打 $ python 就會到指定global的python版本


接下來使用pyenv查看可安裝的python版本

終端機指令為 $ pyenv install --list 

就可以看到霹哩啪拉一堆python的版本
相關版本的差異可以自行搜尋

我選定的是3.6.1的版本

因此 安裝方式請在終端機輸入 $ pyenv install 3.6.1 -v

pyenv就會自動安裝好3.6.1的環境

安裝好之後,更新pyenv的資料庫,輸入 $ pyenv rehash


接著,可以用 $ pyenv versions 查看目前在電腦上的所有python版本
打 * 號的就是目前 global環境下使用的python版本


如何切換呢?
輸入指令 $ pyenv global 3.6.1 就會切換過來了

以上指令是參考此網址:

===================================================
在sublime Text中,我也想同時使用python2.7和 python3.6的執行

操作方式如下:
  1. 打開sublime Text,同時按 Command+Shift+P 
  2. 輸入 install package,之後會有很多的套件可供安裝
  3. 安裝 sublimeREPL 套件
  4. 重複上述1-3步驟 安裝 Anaconda 套件
Anaconda的使用方式可以參考此網頁:

要可以在Sublime Text執行程式前
要先把Build System 先設定好
在裡面可以看見有原本預設的Python (會依照global的設定而走,所以如果global設定為3.6版本,就不需要再增加,直接command+b 就可以執行3.6環境下的程式了)

但是如果想要system是2.7,額外增加一個可以執行3.6版本的
就需要先把Build System 先設定好
Tools => Build System => New Build System 

並複製貼上
{
    "cmd": ["python3.6.1的位置", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

python3.6的位置,可以在終端機輸入 
$ which python3.6 去找
但是 位置是錯誤的,因為我們用pyenv去管理python套件
因此正確的輸入指令為
$ pyenv which python3.6 
再把回覆的位址貼在紅色指令上後,存檔命名,我命名為python3.6.sublime-build
(之後系統會讀取前面的命名為 build system名稱)

之後使用 command + b 就可以compile python程式
也可以使用 command + shift + b 選擇要用 python或 python3.6的環境執行


然後可能有些程式碼不是符合Anaconda的標準
但是還是可以執行
只是程式碼會變得很亂被匡住,然後行數前會有大小黑點

因此在 Sublime Text -> Preference -> Package Settings ->  Anaconda -> Settings - User
裡面

加入指令,存檔後即可: 
{
"anaconda_linting":false
}

之後如果需要安裝python的套件

在終端機上使用
$ pip install 套件名稱

就可以在所有python版本下都安裝好套件!
也就歸功於 pyenv的控制和pip的強大了


2017年4月19日 星期三

Python - 從list中刪除不重複值 和 list comprehension


本次的題目網址

https://py.checkio.org/mission/non-unique-elements/


這題必須要撰寫出一個function,傳入一個list後,刪除裡面不重複的時並回傳
進而刪除不重複值

例如題目中範例所出的傳入傳出後的結果
[1,2,3,1,3]=[1,3,1,3]
[1,2,3,4,5] = []


2017年4月17日 星期一

Python - 數字轉羅馬數字

題目是由checkio網站所出,最近都在使用這個網站重新訓練自己的程式邏輯
Python 是簡單又強大的語言,因此拿來訓練非常方便
希望能夠一個禮拜寫兩題的速度紀錄每次解題的過程
除此之外,也會抽空研究python較重要的幾個模組

本次的題目網址
https://py.checkio.org/mission/roman-numerals/
建議可以先自行練習完再來看以下的邏輯解析