用Windows的朋友應該都體會過,Windows上做Python開發有多痛苦。用pip裝庫各種報錯,然後每次都要花很多時間找解決辦法,每次的心情都像這樣
之前我的解決方法是在Windows上裝VMWare,VMWare上執行Ubuntu,然後在Ubuntu裡面做開發。但這樣也不太方便,每次進入開發環境都要先啟動VMWare,再啟動Ubuntu,然後開啟命令列視窗開始開發,而且有時候需要在宿主機和虛擬機器之間來回切換,也很麻煩。
最近了解到Docker也有Windows的版本,於是就想到在windows上利用Docker執行一個Ubuntu映象,在容器裡搭建Python開發環境,這 樣既解決了安裝庫的問題,也解決了VMWare虛擬機器的不方便之處。
關於容器的基本使用,可以參考我之前的一篇文章 Docker初體驗。
需要注意的是,Windows上安裝Docker對系統有以下的要求:
- 需要支援Hyper-V的windows版本,Hyper-V目前僅在Windows 10之後的版本支援
- BIOS裡需要啟用Virtualization(虛擬化)
如果你的系統滿足上面的要求,接下來,我們來一步一步搭建環境。
安裝Docker for Windows
安裝程式可以從這裡下載 Docker for Windows
安裝完之後,執行Docker for Windows。
Docker執行後可以在狀態列裡看到有一個小鯨魚的圖示,如下所示
開啟命令列視窗,執行下面的命令檢視Docker版本
docker --version
複製程式碼
輸出
Docker version 18.09.0, build 4d60db4
複製程式碼
下載映象
docker hub上提供了很多docker映象,我們以ubuntu:18.04為基礎,打造我們的python開發環境。執行
docker pull ubuntu:18.04
複製程式碼
下載完後,我們來檢視一下本地的映象,執行
docker images
複製程式碼
可以看到如下的輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 93fd78260bd1 6 days ago 86.2MB
複製程式碼
安裝常用工具和Python
我們啟動一個容器,並進到容器內的bash,執行
docker run -it ubuntu:18.04 bash
複製程式碼
我們的這個映象現在只是一個最基本的ubuntu的系統,裡面很多工具都沒有,如ping、ifconfig、wget、vim等,也沒有python。接下來我們把這些一個一個都裝上。
由於映象預設用的是ubuntu官方的源,從國內連官方的源很慢,我們先把源改成163的源。修改/etc/apt/sources.list的內容為下面 的內容
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
複製程式碼
執行
apt update
複製程式碼
接下來,安裝ping,wget,ifconfig,vim等工具
apt install iputils-ping wget net-tools vim
複製程式碼
安裝python3.6
apt install python3.6
ln -s /usr/bin/python3.6 /usr/bin/python
複製程式碼
安裝pip
apt install python3-pip
複製程式碼
配置VIM
安裝完工具後,我們來配置一下vim。開啟~/.vimrc檔案,輸入vim的配置。比如我的配置是這樣的
set ru
syntax on
set background=dark
set sw=4
set ts=4
set tabstop=4
set shiftwidth=4
set expandtab
filetype plugin on
set autoindent
set smartindent
set number
set viminfo='10,\"100,:20,%,n~/.viminfo
function! ResCur()
if line("'\"") <= line("$")
normal! g`"
return 1
endif
endfunction
augroup resCur
autocmd!
autocmd BufWinEnter * call ResCur()
augroup END
highlight WhiteSpaces ctermbg=green guibg=#55aa55
match WhiteSpaces /\s\+$/
複製程式碼
好了,至此,我們的開發環境配置好了。
提交映象
為方便以後的使用,我們把這個配置好的容器打成一個新的映象。在容器中執行exit退出,我們現在來到了windows的命令列視窗。我們檢視一下我們剛剛配置好的容器,執行
docker ps -a
複製程式碼
輸出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39ca895c725e ubuntu:18.04 "bash" 3 hours ago Exited (0) 19 seconds ago relaxed_wiles
複製程式碼
執行下面的命令,提交更改,將容器打包成一個新的映象
docker commit 39ca895c725e shenzhongqiang/python-dev:version1
複製程式碼
我們再來檢視一下本地的映象
docker images
複製程式碼
輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
shenzhongqiang/python-dev version1 fbf0ce58d00d 2 minutes ago 542MB
ubuntu 18.04 93fd78260bd1 6 days ago 86.2MB
複製程式碼
可以看到,現在我們本地有2個映象了。下面一個是原始的docker hub上的ubuntu映象,上面一個就是我們自己定製的映象。
之後我們就可以基於我們定製的映象,啟動容器做開發了。啟動容器很簡單,只要執行
docker run -it fbf0ce58d00d bash
複製程式碼
需要注意的是,容器如果被刪除了,其中的更改也會丟失。要儲存容器中的更改,需要像上面這樣把更改commit到映象中。
好,以上就是定製的所有步驟。這兩天我逐漸把專案遷移到容器裡了,在容器裡開發感覺比在虛擬機器裡開發順滑多了。
為方便起見,上面這個映象放在了我的docker hub上,大家可以通過下面的命令獲取
docker pull shenzhongqiang/python-dev:version1
複製程式碼
如果大家有更好的Windows上配置Python開發環境的建議,也歡迎在評論裡告訴我~
本文已同步更新到公眾號【Python與資料分析】,歡迎關注~