最近遇到了一個場景:須要將Python項目文件打包到沒法聯網的主機上部署執行,本篇文章記錄針對於該場景的處理方案。node
說明:python
源主機(可聯網):安裝了Python3和pip3c++
目標主機(沒法聯網):需安裝和源主機相同的Python版本和pip3,部署執行項目文件sql
主機系統爲centos,Python版本爲3.5.2,經過虛擬環境+pip進行遷移centos
Python3ui
首先,下載Python3,能夠在官網或者經過源主機(可聯網的其它主機)wget:命令行
wget --no-check-certificate https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
Python3依賴包code
而後,須要下載Python3的依賴包,能夠經過centos鏡像中去copy,不過我更推薦用yum生成的方式:sqlite
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages
命令執行完畢,你就會在/packages目錄下發現所需的全部.rpm文件。ip
若是,源主機中已經安裝了這些依賴,那麼你能夠用:
yum reinstall zlib-devel bzip2-devel openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages
打包:
zip -r packages.zip packages/
將Python-3.5.2.tgz和packages.zip上傳至目標主機。
首先,安裝Python3依賴:
unzip packages.zip cd packages/ rpm -Uvh *.rpm --nodeps --force
而後,安裝Python3:
tar -zxvf Python-3.5.2.tgz mkdir /usr/local/python3 cd Python-3.5.2 ./configure --prefix=/usr/local/python3 # 將Python3安裝在/usr/local/python3 make && make install # 編譯安裝 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 建立python3軟連接 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 建立pip3軟連接
安裝完畢,可經過:
Python3 -V pip3 -V
查看並檢查安裝的版本
若項目中建立虛擬環境,首先激活虛環境,而後進入項目文件,執行:
pip3 freeze > requirements.txt
將當前項目中的庫列表生成並保存在requirements.txt中。
而後,經過pip生成批量離線安裝包(whl文件):
pip wheel --wheel-dir=./tmp/packages -r requirements.txt
執行完畢以後,你會發現/tmp/packages中包含了項目所需的全部.whl
打包項目文件:
zip A.zip A/
上傳A.zip至目標主機,建立虛環境,並激活(python3 自帶了venv):
python3 -m venv test_venv cd test_venv source bin/activate
解壓項目代碼A.zip,並切換:
unzip A.zip cd A/
安裝項目Python依賴模塊:
pip3 install --no-index --find-links=tmp/packages -r requirements
安裝完畢,檢查:
pip3 freeze
固然你也能夠經過python命令行import進行檢驗哈哈。
最後,執行項目啓動腳本(startup.sh)部署:
chmod +x ./startup.sh nohup ./startup.sh > a-log 2>&1 &
以上,就完成了整個項目的遷移部署。