1. Linux软件安装的方式
yum 安装适合小型软件;rpm安装软件需要处理依赖关系;编译安装适合大型软件和一般需要自定制功能的软件。
不推荐使用rpm的安装方式,需要处理依赖关系!
2. virtualenv
在使用 Python 开发的过程中,物理环境中存在各种各样的库。这些库的版本是固定的,而 不同的工程项目依赖于不同版本的库
,就会引起依赖问题。需要对不同的项目 使用不同的虚拟环境来保持开发环境以及宿主环境的清洁
。virtualenv 是一个帮助我们管理不同 python 环境的工具,使用virtualenv可以在系统上建立多个不同并且相互不干扰的虚拟环境
。
virtualenv的原理:把系统 Python 复制一份到 virtualenv 环境,用命令 source venv/bin/activate
进入virtualenv环境时,virtualenv 会修改环境变量,在原有 $PATH
的最前面加上虚拟环境的 bin 目录,这样,在虚拟环境下优先执行虚拟环境中的 Python 和 pip 。也就是说虚拟环境中的 $PATH
和物理环境中的是不一样的。
(1)安装 virtualenv
升级pip工具:$ pip3 install --upgrade pip
安装 virtualenv:$ pip3 install virtualenv,如果下载慢,可以指定清华源或者豆瓣源下载:
$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
(2)创建独立运行
$ virtualenv --no-site-packages --python=python3.8 venv
--no-site-packages
是构建一个干净的,和外界没有关系的虚拟环境。虚拟环境是基于物理环境的复制,这里是基于Python3.8。venv 是虚拟环境的名字,这里使用的是相对路径。
(3)激活虚拟环境
$ source venv/bin/activate
(4)退出虚拟环境
$ deactivate
(5)查看 pip,可以看到 pip 来自于虚拟环境
$ which pip
3. 开发环境的一致性
我们在本地开发环境准备好了Python项目和依赖环境,现在需要放到服务器中上线发布,那么必须要 保证服务器的Python环境和本地环境是一致的
。
(1)导出当前Python环境的包
$ pip freeze > requirements.txt
这句命令执行后将会创建一个requirements.txt的文件,其中包含了当前环境所有的包/库以及各自版本的简单列表。
(2)将产生的文件上传到服务器,在服务器下创建虚拟环境,在虚拟环境中导入项目所需要的模块依赖。
$ pip install -r requirements.txt
4. virtualenvwrapper
virtualenv 最大的缺点就是 每次开启虚拟环境都要去虚拟环境所在目录的bin目录下激活虚拟环境
,这就要求我们每次都要记住这个虚拟环境所在的目录。一种解决方案就是将所有的虚拟环境目录全部收集起来,针对不同的目录做不同的事。 virtualenvwrapper可以统一管理虚拟环境的目录,并且帮助我们省去source
步骤。
(1)安装 virtualenvwrapper
$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper
(2) 设置 Linux 环境变量,每次启动加载 virtualenvwrapper
找到 virtualenvwrapper.sh
所在路径:
$ which virtualenvwrapper.sh
$ find / -name virtualenvwrapper.sh
/usr/local/python373/bin/virtualenvwrapper.sh
将 /usr/local/python373/bin/
目录加入到环境变量:
$ PATH=$PATH:/usr/local/python373/bin
将 PATH=$PATH:/usr/local/python373/bin/
放在 /profile
文件的最下面写入配置文件,永久生效。:
$ vim /etc/profile
读取文件生效:
$ source /etc/profile
编辑 ~/.bashrc
文件,此文件在用户每次登录的时候,系统就会读取这个文件:
$ vim ~/.bashrc
在 .bashrc 文件中写入下面三行命令:
export WORK_HOME=~/Envs # 设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/python373/bin/virtualenvwrapper.sh # 执行virtualenvwrapper安装脚本
读取文件使生效:
[root@master ~]# source ~/.bashrc
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/get_env_details
此时就可以使用 virtualenvwrapper!
(3)virtualenvwrapper 相关命令
创建 venv 虚拟环境,默认会激活这个虚拟环境:$ mkvirtualenv venv
退出虚拟环境:$ deactivate
进入/切换虚拟环境:$ workon venv
workon提供自动补全功能,可以停止你当前的环境可以在多个虚拟环境中来回切换
删除虚拟环境 venv:$ rmvirtualenv venv
列举所有虚拟环境:$ lsvirtualenv
在虚拟环境下做了统一的管理,查看Envs目录:$ ls ~/Envs/
切换到当前激活的虚拟环境的目录:$ cdvirtualenv
5. Flask项目部署
激活项目所处的虚拟化环境:
$ source activate
导出虚拟化环境中的库并上传到服务器:
$ pip freeze > requirements.txt
$ scp requirements.txt root@106.12.115.136:/root/
创建虚拟化环境并导入依赖包:
$ mkvirtualenv project_name_venv
$ pip3 install -r requirements.txt
本地环境中导出数据库并上传服务器:
$ mysqldump -uroot -p db_name > db_name.sql
$ scp db_name.sql root@123.123.123.123:/root/
登录后导入数据:
MariaDB [(none)]> source db_name.sql
从仓库克隆项目源代码:
$ git clone https://github.com/ThanlonSmith/project_name.git
进入project_name目录创建名为 uwsgi.ini
的文件:
$ touch uwsgi.ini
在 uwsgi.ini
文件中写入以下内容:
[uwsgi]
socket = 127.0.0.1:8001 # 启动程序时使用的地址和端口,与nginx中配置的对应
chdir = /home/thanlon/project_name/ # 项目所在目录
wsgi-file = manage.py # 项目程序启动文件
callable = app # 程序内启用的application变量名字
processes = 2 # 处理器的数量,我的是2个处理器
stats = 127.0.0.1:9191