Jenkins构建Python项目环境和依赖包安装
摘要:Jenkins构建Python项目环境和依赖包安装 本文主要讲解Python项目中,Python环境部署以及依赖包的自动安装; 我们平时使用PyCharm编写我们的代码然后提交到Git远程服务器上一般不会包含Python环境和第三方依赖包,...
Jenkins构建Python项目环境和依赖包安装
本文主要讲解Python项目中,Python环境部署以及依赖包的自动安装;
我们平时使用PyCharm编写我们的代码然后提交到Git远程服务器上一般不会包含Python环境和第三方依赖包,只会提交代码部分;
那么我们在另外一台电脑拉取项目代码到本地,Python环境以及项目所需的依赖包或库如何同步部署安装呢?
又或者是在使用Jenkins构建我们的项目时,如何部署环境和自动安装所需的依赖包?
我们首先来了解两个东西;
Python虚拟环境
什么是虚拟环境
假设自己电脑上的Python环境称为系统环境,而默认情况下,虚拟环境和系统环境是完全隔离的;
每个系统环境下可以有多个虚拟环境;
每个虚拟环境都有自己独立的Python二进制文件及单独的包安装目录,可以在虚拟环境中安装属于自己的Python包,而系统环境、其他虚拟环境不会拥有这些Python包;
总之一句:Python虚拟环境主要是为不同Python项目创建一个隔离的环境,每个项目都可以拥有独立的依赖包环境,而项目间的依赖包互不影响;
所以强烈推荐我们的项目使用虚拟环境来运行,而不是直接使用系统环境运行Python项目;
如何创建Python虚拟环境
执行以下命令可直接创建虚拟环境,这里的python指的是系统环境的python可执行文件,使用系统环境的python来创建虚拟环境,后面的路径指的是虚拟环境创建的目录,没有会自动创建目录;
python -m venv D:/venv
我这里以D:/venv为例,这个路径可以自定;
创建之后大概内容就是这样:
当然创建之后还不能使用,我们需要执行一下里面的activate文件(Linux)/activate.bat文件(Windows)来激活虚拟环境,执行一遍之后就可以了(通过命令行执行或者手动双击执行);
虚拟环境激活后已经是可以使用的了,当前创建好的这个虚拟环境是一个全新的虚拟环境,没有安装任何第三方依赖包;
requirements.txt文件
requirements.txt
是一个文件,它记录了Python项目的所有依赖项,该文件包含了依赖包的名称和指定的版本号(使用==、>=、<=指定),例如:
在该项目中使用以下命令生成requirements.txt文件;
pip freeze > requirements.txt
之后如果创建了一个新的虚拟环境,可以在虚拟环境中使用,在项目环境中执行以下命令根据requirements.txt文件为当前项目的虚拟环境安装相关依赖包(需要联网);
pip install -r requirements.txt
我们项目中需要有一个requirements.txt
文件在项目根目录下并且需要加入版本控制当中,如果项目所需要的依赖包有变化时我们也应该使用pip freeze > requirements.txt
命令来更新这个文件,以便在其它地方保持依赖包的同步;
Jenkins构建时部署Python环境和安装相关依赖包
了解完上面两个东西之后,事情就变得简单了,直接参考我的构建代码;
benv和venv根据实际情况修改;
benv为系统环境的目录,我这里是C:/Program Files/Python310,即为Python安装的目录;
venv为虚拟环境的目录,一般固定一个位置就可以了,我这里是把虚拟环境放在了D:/venv,如果该目录不存在则代表首次运行,执行下面的代码自动判断并创建虚拟环境;
Windows Bat代码:Jenkins构建步骤执行下面的代码(根据你项目实际情况修改)
:: Set the project root directory.
:: 设置项目目录
set PYTHONPATH=%WORKSPACE%
:: Set the basic python binary and virtual environment location.
:: 设置基础解释器位置和虚拟环境目录
set PYTHON_BASIC_BINARY=C:\Program Files\Python311\python.exe
set PYTHON_VENVS=D:\venv
:: Check and create virtual environment.
:: 检查和创建当前项目的虚拟环境
if not exist %PYTHON_VENVS% (
mkdir %PYTHON_VENVS%
)
set VENV=%PYTHON_VENVS%\venv_%JOB_BASE_NAME%
if not exist %VENV%\pyvenv.cfg (
call "%PYTHON_BASIC_BINARY%" -m venv %VENV%
call "%VENV%\Scripts\python.exe" -m pip install --upgrade pip >nul 2>&1
call "%VENV%\Scripts\python.exe" -V
call "%VENV%\Scripts\pip.exe" -V
)
:: Activate to join the virtual environment.
:: 激活虚拟环境加入环境变量
call "%VENV%\Scripts\activate.bat"
:: Update dependencies.
:: 安装依赖
pip install -r requirements.txt -q
:: Execute the main.
:: 执行脚本
python main.py
Linux Shell代码:(如果你的Jenkins是在Linux上运行)
# Set the project root directory.
# 设置项目目录
export PYTHONPATH=$WORKSPACE;
# Set the basic python binary and virtual environment location.
# 设置基础解释器位置和虚拟环境目录
PYTHON_BASIC_BINARY=/usr/local/bin/python;
PYTHON_VENVS=/root/venv;
# Check and create virtual environment.
# 检查和创建当前项目的虚拟环境
mkdir -p $PYTHON_VENVS; chmod 0755 $PYTHON_VENVS;
VENV=$PYTHON_VENVS/venv_$JOB_BASE_NAME;
if [ ! -f "$VENV/pyvenv.cfg" ]; then
$PYTHON_BASIC_BINARY -m venv $VENV;
$VENV/bin/python -m pip install --upgrade pip >/dev/null 2>&1;
$VENV/bin/python -V;
$VENV/bin/pip -V;
fi
# Activate to join the virtual environment.
# 激活虚拟环境加入环境变量
. $VENV/bin/activate;
# Update dependencies.
# 安装依赖
pip install -r requirements.txt -q;
# Execute the main.
# 执行脚本
python main.py;
上面的代码逻辑很简单,复制过去就能用,根据你的项目情况简单修改一下即可,注意这三个地方就可以了:
1、系统基础Python环境的位置,根据你安装的Python实际位置进行修改;
2、将要创建虚拟环境的位置,这个可以自定,如果你没有特殊要求,以脚本给的默认位置即可;
3、最后一句执行python
脚本的命令行,这个根据你的项目,具体执行哪个.py
脚本以及携带参数之类的;
目前刚设置好构建代码,我这里虚拟环境还没有创建,在Jenkins里手动构建看一下;
开始构建后venv目录已经有了,虚拟环境已经创建,依赖包也全部安装好了;
构建日志,成功;