搭建屬於你的科研平臺
- 背景
- 主要步驟
- 1. Python搭建虛擬環境:
- 修改conda 和 pip爲清華鏡像源
- pip方法
- conda 方法![anaconda清華源配置](https://img-blog.csdnimg.cn/20200203152357204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MjIxNTgz,size_16,color_FFFFFF,t_70)
- 用pip的virtualenv創建虛擬環境
- 基於conda創建虛擬環境
- 刪除虛擬環境
- 2. 安裝依賴
- 3. 本地運行flask後端
- 4. 部署到服務器(實驗室服務器or公有云)
- 5. 附錄
背景
在CS、EE相關的領域,我們往往會做一些實驗。比如smart health,近幾年學術界希望做到device free,即不需要任何的貼片傳感器貼在人體身上,通過手機自帶的傳感器,實現一個app獲取、分析、返回結果。
坦白說科研圈子的代碼功底無法與工業界的技術大佬們相比,因此如果基於android框架在手機端開發一套能夠手機本地處理的算法。一方面手機的運算能力較弱、另一方面需要考慮UI、事務線程的分層。往往算法部分用matlab、python是比較常見的。
此demo以手機端安卓應用爲例+後端算法(部署於服務器)基於flask-server搭建。旨在於搭建一套能夠將手機端的文件:*.csv / .wav / .txt/ .xlsx/ ……等科研結果傳輸到服務器,算法處理完結果後以http response的方式返回。手機端可自行編寫handler方法,進行toast等方式的UI顯示。
主要步驟
接下來講解如何從0開始搭建這個框架:
1. Python搭建虛擬環境:
原本打算使用docker的方式,這樣本地測試完畢基本上就docker一包上雲開始用。考慮到阿里雲服務器的存儲資源有限,就不裝鏡像佔硬盤了~還是一個項目一個虛擬環境吧。
修改conda 和 pip爲清華鏡像源
pip方法
- 臨時使用: 可以在使用pip的時候加參數
-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent
,這樣就會從清華這邊的鏡像去安裝gevent
庫。 - 永久修改,一勞永逸:
- linux下,修改
~/.pip/pip.conf
(沒有就創建一個), 修改 index-url至tuna,內容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
- windows下,直接在user目錄中創建一個pip目錄,如:C:\Users\xx\pip,新建文件pip.ini,內容如下
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
conda 方法
channels:
- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
用pip的virtualenv創建虛擬環境
- 安裝虛擬環境的第三方包 virtualenv :
pip install virtualenv
- 使用清華源安裝:
pip install -i https://pypi.python.org/simple/ virtualenv
創建虛擬環境
cd 到存放虛擬環境的地址
,比如cd ~/IT/algo-backend/
virtualenv venv
在當前目錄下創建名爲ENV
的虛擬環境(如果第三方包virtualenv安裝在python3下面,此時創建的虛擬環境就是基於python3的)
virtualenv -p /usr/local/bin/python3.6 venv
參數 -p 指定python版本3.6創建虛擬環境venv
virtualenv --system-site-packages venv
參數 --system-site-packages 指定創建虛擬環境時繼承系統三方庫
note:由於flask推出初版時間爲2010年,更傾向於python3+,儘量使用python3.5以後的版本。
激活/退出虛擬環境
cd ~/algo-backend
跳轉到虛擬環境的文件夾
source venv/bin/activate
激活虛擬環境
pip list
查看當前虛擬環境下所安裝的第三方庫
deactivate
退出虛擬環境
基於conda創建虛擬環境
- 創建虛擬環境
conda create -n Algo-One-Backend python==3.7
這樣就創建了一個名字爲ENV,基於python版本3.6的一個虛擬環境了。注意,這裏和pip建立的虛擬環境不同,pip建立的虛擬環境會直接在當前目錄下生成一個虛擬環境的目錄,激活虛擬環境也需要指定這個目錄才行。而conda安裝的虛擬環境,只會把虛擬環境的目錄生成在anaconda安裝目錄下的env目錄下。所以,conda創建的虛擬環境有一個很大的優點就是不用指定虛擬env的路徑,不過前提是你需要把conda的環境變量早早設置好。
-
激活/退出虛擬環境
source activate Algo-One-Backend
激活虛擬環境
source deactivate
退出虛擬環境 -
安裝所需的第三方庫
conda install -n Algo-One-Backend [package]
其中-n代表 name: Algo-One-Backend 指定了該虛擬環境
也可以在激活虛擬環境的狀態下運行pip install [package]
-
查看conda環境下所有的虛擬環境
conda info --envs
刪除虛擬環境
直接刪除虛擬環境所在目錄即可
2. 安裝依賴
- 安裝
requirements.txt
,如下預提供一份,自行創建requirements.txt
後,將以下內容複製即可
backcall==0.1.0
Click==7.0
decorator==4.4.1
Flask==1.1.1
Flask-SocketIO==4.2.1
gevent==1.4.0
greenlet==0.4.15
gunicorn==20.0.4
ipython==7.10.1
ipython-genutils==0.2.0
itsdangerous==1.1.0
jedi==0.15.1
Jinja2==2.10.3
joblib==0.14.1
MarkupSafe==1.1.1
numpy==1.17.4
pandas==0.25.3
parso==0.5.1
pexpect==4.7.0
pickleshare==0.7.5
prompt-toolkit==3.0.2
ptyprocess==0.6.0
Pygments==2.5.2
python-dateutil==2.8.1
python-engineio==3.11.2
python-socketio==4.4.0
pytz==2019.3
scikit-learn==0.22
scipy==1.3.3
six==1.13.0
sklearn==0.0
traitlets==4.3.3
wcwidth==0.1.7
Werkzeug==0.16.0
- 安裝依賴文件,
pip install -r requirements.txt
- 使用過程中如果安裝了新的包,可以通過
pip freeze > requirements.txt
更新該依賴文件。
3. 本地運行flask後端
- github下載/clone demo,歡迎star/pull request etc. 哈!
- 可以用
gunicorn demo.app:app -c gunicorn.conf.py
來啓動程序,demo.app指在項目的根目錄下運行這條命令時,app.py
在demo/
文件夾下,要定義好demo.app
才能找到啓動程序入口
4. 部署到服務器(實驗室服務器or公有云)
- 按照1.步驟中
ssh
到服務器,把虛擬環境搭建起來 - 把本地測試完的文件通過ftp的方式傳輸到server
- 把自己的文件正式部署完
gunicorn.conf.py
裏面默認定義線程爲3個,提高響應能力。大家在裏面定義自己的程序端口,用之前先看一下系統中哪些端口已經被佔用了netstat -ntulp
一大段列表裏面找8888以後空餘的端口。- 依次使用端口
8888\8889\8890\8891……
然後發現8890還沒人用,就把gunicorn.conf.py
的端口改掉 - 由於想要讓程序一直在後臺運行,命令改爲
nohup gunicorn demo.app:app -c gunicorn.conf.py
就可以了
5. 附錄
注意點:flask 包導入的問題:如果沒有寫過多層級的flask模塊,大家可能在文件分層管理會遇到一些困難。 Python在不同目錄下導入模塊的方法