不用開著電腦,如何將指令碼程式碼放到伺服器上?

AI科技大本營發表於2019-03-04

640?wx_fmt=jpeg

 

作者 | sergiojune

轉載自公眾號日常學python(ID:daily_learn)

 

程式設計師轉行學什麼語言?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

上次弄了個機器人,反響挺不錯的,我也挺滿意的,因為這個我也初步瞭解了伺服器這個東西,懂得了如何將自己的指令碼程式碼放到伺服器上執行了,媽媽再也不怕我每天都得開著電腦才能執行指令碼了,不過說實話,這個伺服器真貴,不過有阿里雲學生機,想嘗試瞭解下的可以去試試,非常建議去折騰下,可以學到的東西很多。

 

640?wx_fmt=png

 

當時為了將程式碼放到伺服器上執行,也花了很多時間,所以避免還有不會的小白同學,記錄下此過程,讓他們少走點坑。

 

1. 購買伺服器

 

如果你是學生的話,想折騰的可以去阿里雲那裡購買,因為有學生機優惠,只需要9.9一個月,但是隻能購買一次,在下一次購買需要做任務才可以繼續享用學生機優惠。如果你是土豪的話,可以直接忽略這個。

 

因為這次我只需要把機器人指令碼執行就可以了,所以直接選擇學生機的配置就夠用了。

 

阿里雲的學生機購買連結:

 

https://promotion.aliyun.com/ntms/act/campus2018.html?spm=5176.10695662.1244717.1.605c4804V5gfhs

 

640?wx_fmt=png

 

點選購買即可。

 

640?wx_fmt=png

 

這個密碼是你登陸上伺服器的密碼,需要記住,登陸使用者名稱就是 root

 

接下來就是掃碼支付了。

 

購買了點選阿里雲控制檯,點選雲伺服器ECS,就可以看到你剛才購買的伺服器了。

 

640?wx_fmt=png

 

再點選下面的雲伺服器,你就可以看到這個伺服器的相關配置了

 

640?wx_fmt=png

 

連線伺服器可以在這個頁面的右邊的遠端連線進行連線,這個第一次點進去會有個遠端連線密碼,需要記住,因為每次在這裡進行遠端連線的時候都需要填入這個密碼

 

640?wx_fmt=png

 

640?wx_fmt=png

 

連線成功就會顯示一個黑色框,這裡連線伺服器雖然可以,但是不太方便,這裡推薦大家一個在 window 的免費 ssh 連線工具 putty

 

2. 在伺服器上配置 Python 環境

 

需要在伺服器上執行 Python 指令碼 ,就必須要在伺服器上有 Python 的環境,在阿里雲購買的學生機預設就裝有 Python 的,不過版本是 2.7.5。這裡我們重新安裝 Python3,是這個伺服器上可以多個版本共存。

 

先在 putty 上連線我們的伺服器。

 

640?wx_fmt=png

 

上面的 ip 地址就是我們購買的伺服器的共有ip地址,使用 ssh連線就行了。不過還得設定一個東西,不設定的話,如果超過一段時間不動終端的話,就會自動斷開,又得重新連線

 

640?wx_fmt=png

 

這裡設定成 60 秒就可以了,原理我現在不太記得了,如果有讀者知道的話,可以在留言區說下。

 

640?wx_fmt=png

 

點選 open,然後填寫使用者名稱 root 和自己之前設定的密碼即可登陸成功,如上圖。

 

接下來就是開始安裝我們的 Python3 環境了。

 

先檢視下 centos 伺服器的已安裝的 Python 版本

 

  •  
python -V

 

640?wx_fmt=png

 

我這裡是 3.6.8 版本,因為我重新配置了,如果你第一次使用,這個結果是 python 2.7.5

 

檢視 python 可執行檔案的路徑

 

640?wx_fmt=png

 

可以看到所在的目錄,進入這個 bin 目錄,並檢視 python 檔案

 

640?wx_fmt=png

 

可以看到我這裡的 python 指向了 python3 這個檔案,但是你們第一次的會指向 python2.7 這個檔案,接下來就是將 python 這個軟連線指向 python3 就行了。如果怕弄壞的,想備份原來 python2 的檔案可以執行 mv python2.7 python.bak 就可以將檔案備份到當前目錄了。

 

安裝 python3.6.8 版本

1)先安裝相關包

 

  •  

 

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

 

640?wx_fmt=png

 

需要需要確認時直接輸入 y 即可

 

640?wx_fmt=png

 

2)下載 python 3.6.8 原始碼包

 

如果覺得下載網速有點慢的話,可以更換阿里雲源,可以參考這個連線:https://blog.csdn.net/qq_37274323/article/details/81107958

 

下載 python 3.6.8 包

 

  •  

 

https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz

 

640?wx_fmt=png

 

解壓 python 3.6.8 原始碼包

 

  •  

 

tar xf Python-3.6.8.tar.xz -C /usr/local/src/

 

這個是將 python 原始碼包解壓到資料夾 /usr/local/src 內,這裡你也可以自己指定解壓目錄,你自己記得解壓位置即可。

 

安裝 python3

 

  •  

 

./configure --prefix=/usr/local/python3

 

這裡的地址需要指定為自己的 python 原始碼包解壓地址。

 

編譯

 

  •  

 

make && make install

 

 

這時候可以說安裝 python3 成功了,我們可以使用這個命令檢視

 

  •  

 

/usr/local/python3/bin/pip3 list

 

 

640?wx_fmt=png

 

更新 pip 版本

 

  •  
/usr/local/python3/bin/pip3 install --upgrade pip

 

也可以檢視一下是否更新成功

 

  •  

 

/usr/local/python3/bin/pip3 list

 

3)建立軟連線

現在就是需要將 python3 這個檔案建立軟連線,使 python 指向 python3 即可。

 

  •  
ln -s /usr/local/python3/bin/python3 /usr/bin/python

 

執行之後檢視 python 版本

 

  •  

 

python -V

 

640?wx_fmt=png

 

成功之後就會看到 python 指向了 python 3.6.8 版本,如果出錯了

 

  •  

 

bash: python: command not found...

 

這個是你建立軟連出問題了,可能指定的 python3 安裝路徑不正確,這時候將 python 這個軟連線刪除重新建立即可。
 

你可以進入 。/usr/bin 目錄,檢視是否建立軟連線成功

 

640?wx_fmt=png

 

若找到 python 這個指向為紅色顯示的,證明建立錯誤了,python3 的地址錯誤了。

 

640?wx_fmt=png

 

這時就刪除這個 python 軟連線

 

640?wx_fmt=png

再重新建立 python 軟連線即可

 

  •  

 

ln -s /usr/local/python3/bin/python3 /usr/bin/python

 

這前面的地址就是 python3 的安裝路徑,就是有 python3 這個檔案的目錄。

 

4)修改 yum 配置

因為 yum 原來是使用 python2 的,改了 python3 之後可能會出錯,所以需要重新配置。

 

修改 yum 檔案

 

  •  

 

vi /usr/bin/yum

 

把檔案頭部的#!/usr/bin/python改成#!/usr/bin/python2.7儲存,然後按esc,輸入 :wq 退出即可

 

修改 urlgrabber-ext-down 檔案

 

  •  

 

vi /usr/libexec/urlgrabber-ext-down

 

第一行改為#!/usr/bin/python2.7,然後按esc,輸入 :wq 退出即可

 

640?wx_fmt=png

 

現在就完成了 python 環境的配置了。

 

3. 下載相關庫

 

為了方便管理,我這裡使用了虛擬環境,防止每個指令碼執行時所需要的庫進行衝突,如果你暫時沒有想那麼複雜,只是想執行一次指令碼而已,也可以不必要使用虛擬環境,不過還是建議使用虛擬環境的,畢竟始終都需要用到的。

 

1)下載 virtualenv 庫

這個是建立 虛擬環境使用的庫。

 

  •  

 

pip3 install virtualenv

 

注意:這裡使用的是 pip3,若是直接使用 pip 則對應的是 python2 版本的。

 

2)下載 virtualenvwrapper-win 庫

這個庫是為了方便管理虛擬環境使用的

 

  •  
pip3 install virtualenvwrapper-win

 

下載完了還需要配置環境變數

 

  •  
 vim ~/.bashrc

 

在末尾新增上這兩句

 

  •  
  •  

 

export WORK_HOME=$HOME/.virtualenvssource /usr/local/python3/bin/virtualenvwrapper.sh

 

第一句是固定的,第二句為指定 virtualenvwrapper 安裝的路徑

 

640?wx_fmt=png

 

啟用配置

 

  •  
source ~/.bashrc

 

640?wx_fmt=png

 

然後進入你想建立虛擬環境的路徑,輸入以下命令

 

  •  
mkvirtualenv py3_test

 

建立成功之後會自動進入該虛擬環境

 

640?wx_fmt=png

 

但是這裡預設使用的是 python2 版本指定的虛擬環境,需要使用 python3 版本可以指定版本建立

 

指定 python 版本建立虛擬環境

 

  •  

 

mkvirtualenv py3 --python=python

 

上面使用 --python 引數來指定 python 版本,因為 python 這個檔案是指向 python3 的,所以可以這樣使用,當然你也可以填上你 python3 版本的位置,這時虛擬環境的 python 版本就是 3 了。

 

640?wx_fmt=png

 

3. 下載機器人相關庫

 

640?wx_fmt=png

 

這裡就是在虛擬環境中使用 pip3 安裝 itchat 和 requests 庫(用於爬蟲獲取早報)即可

 

4. 上傳指令碼到伺服器

 

由於伺服器上原本就帶有 ftp 伺服器的,所以我們只需要在本地安裝個 fileZilla 客戶端進行連線即可,自己去官網下載即可。

 

640?wx_fmt=png

 

這裡填上自己的伺服器 ip 地址和連線賬號和密碼 ,點選連線即可

 

640?wx_fmt=png

 

連線成功之後,左邊就是我們伺服器上面的檔案了,右邊就是本地檔案,右擊需要上傳的檔案選擇上傳即可。上傳成功之後即可在伺服器上看到相關檔案。

 

640?wx_fmt=png

 

接下來就是執行指令碼了。

 

5. 在伺服器上執行指令碼

 

可以直接像在本地一樣執行指令碼

 

  •  

 

python robot.py

 

這樣就可以 執行成功了,但是我們在關閉連線之後,這個指令碼就停止了,那豈不是還是需要開著電腦掛機?

 

別急,我們可以在後臺執行指令碼啊,這樣即使關閉連線,也一樣在執行。使用命令如下:

 

  •  
nohup python robot.py

 

這時你可以檢視程式

 

  •  

 

ps -ef | grep python

 

640?wx_fmt=png

 

就會看到我們剛才 robot 程式碼已經執行起來了,這個就是在後臺執行,關閉連線之後一樣會執行,這下就放心了。

 

但是,如果發生錯誤的話,我們是無法知道哪裡出錯的,這時我們指定日誌輸出檔案

 

  •  

 

nohup python -u robot.py > robot.log 2>&1 &

 

-u 就是指定實時的日誌輸出目錄,而 & 符號是使程式在後臺執行,一邊執行還可以一邊檢視日誌輸出檔案,這裡的 robot.log 就是我們的日誌輸出檔案

 

還有一個問題,我想停止機器人怎麼辦?可以使用這個命令

 

  •  

 

kill PID

 

這裡 PID 為 linux 系統上的程式號,要想停止哪個後臺程式就填上它對應的 PID 即可,檢視 PID

 

  •  
ps -ef | grep python

 

640?wx_fmt=png

 

箭頭所指就是 PID 了。

 

最後

 

由於我現在的知識水平有限,暫時只能說明這麼多,這些都是我當初在第一次使用時所做的記錄,如有錯誤,還請幫忙指出。同時還參考了幾篇文章:

 

  • https://www.cnblogs.com/sanduzxcvbnm/p/5984352.html

  • https://blog.csdn.net/miner_zhu/article/details/81315974

  • https://blog.csdn.net/eastmount/article/details/79321822

  • 如何挑戰百萬年薪的人工智慧!

    https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

(本文為 AI科技大本營轉載文章,轉載請聯絡原作者)

 

群招募

 

掃碼新增小助手微信,回覆:公司+研究方向(學校+研究方向),邀你加入技術交流群。技術群稽核較嚴,敬請諒解。

640?wx_fmt=jpeg

推薦閱讀:

                         640?wx_fmt=png

❤點選“閱讀原文”,檢視歷史精彩文章。

相關文章