如何把python項目部署到linux服務(wù)器
最近用Python寫了個外掛,需要部署到Linux環(huán)境的服務(wù)器上,由于之前本地開發(fā)時使用virtualenv,使用這個虛擬環(huán)境有個好處是項目中依賴的庫不會是全局的,只在當前項目的目錄下有效,因為我是Mac系統(tǒng),virtualenv環(huán)境下的庫文件和linux上所需要的庫不通用,所以不能簡單的將整個env拷貝到服務(wù)器運行,需要做一些額外的工作。
一般每個不同的項目都會依賴各自的庫,有些庫的版本不一樣會引起沖突,為了解決這個問題,需要使用虛擬環(huán)境,Python可以在每個項目目錄下創(chuàng)建各自的虛擬環(huán)境,項目所依賴的包就在環(huán)境目錄下,這樣避免了庫版本的沖突,也方便相同操作系統(tǒng)間可以快速的拷貝項目運行。
我使用的是Python3編寫的項目,CentOS 7的服務(wù)器上只有Python2,所以需要先安裝一下Python3的環(huán)境
第一步:安裝Python3環(huán)境1.首先安裝編譯環(huán)境(后續(xù)需要從python官網(wǎng)獲取Python3的源碼自己編譯python)
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
2.從官網(wǎng)下載python3的源碼
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
3.依次執(zhí)行 解壓>進入解壓后的目錄>編譯安裝
tar -xvJf Python-3.6.2.tar.xzcd Python-3.6.2./configure prefix=/usr/local/python3make && make install
4.安裝完畢,創(chuàng)建軟連接
ln -s /usr/local/python3/bin/python3 /usr/bin/python# 執(zhí)行命令python -V #將會看到python3的版本# 執(zhí)行命令python2 -V #將會看到python2的版本
5.后續(xù)工作,由于執(zhí)行CentOS的yum命令需要使用自帶的python2的版本,所以需要做兩處修改
vim /usr/bin/yumvim /usr/libexec/urlgrabber-ext-down#將 這兩個文件的 #! /usr/bin/python修改為 #! /usr/bin/python2
第二步:將本地開發(fā)環(huán)境的依賴項目生成清單文件1.在本地的開發(fā)環(huán)境中,env下執(zhí)行:
pip3 freeze >requirements.txt
清單文件將會生成在當前項目目錄下,內(nèi)容如下所示
certifi==2018.4.16chardet==3.0.4idna==2.7requests==2.19.1urllib3==1.23
將生成后的文件上傳到linux服務(wù)器
2.將Python項目上傳到服務(wù)器
第三步:在linux服務(wù)器上為項目創(chuàng)建虛擬環(huán)境,并安裝項目所需的依賴1.切換到pip3所在的目錄 /usr/local/python/bin,執(zhí)行以下命令
# 安裝虛擬環(huán)境pip3 install virtualenv
# 創(chuàng)建虛擬環(huán)境 ENVvirtualenv ENV
# 切換到虛擬環(huán)境所在的目錄cd ENV
# 啟用虛擬環(huán)境source ./bin/activate
# 安裝依賴清單里的庫pip3 install -r requirements.txt
# 列出當前虛擬環(huán)境所安裝的依賴庫pip3 list
第四步:添加自定義系統(tǒng)服務(wù)(很重要)
# 這樣的命令在ssh終端退出后,python進程也會被殺掉python xxx.py &
需要創(chuàng)建一個自定義的系統(tǒng)服務(wù),來保證python程序能夠在后臺運行。
1.創(chuàng)建系統(tǒng)服務(wù)
vim /usr/lib/systemd/system/robot.service
內(nèi)容如下:
[Unit]Description=robotAfter=network.target[Service]Type=forkingExecStart=/usr/local/python3/bin/ENV/bin/python /usr/local/python3/bin/ENV/p3.py &PrivateTmp=true[Install]WantedBy=multi-user.target
ExecStart為服務(wù)啟動時執(zhí)行的命令,不能用相對路徑, 一定要全路徑。這里也可以將命令寫到任意的.sh文件中,這里寫.sh文件的全路徑也是可以的。
2.啟用自定義系統(tǒng)服務(wù)
systemctl enable robot
3.啟動服務(wù)
systemctl start robot
可以查看進程,確認一下服務(wù)是否啟動
ps aux|grep robot
完畢!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
