文章目录
-
-
- [如何在离线情况下部署项目(前端VUE + 后端Python)](#如何在离线情况下部署项目(前端VUE + 后端Python))
-
如何在离线情况下部署项目(前端VUE + 后端Python)
虚拟环境离线迁移
- 生成requirements.txt文件,获取当前项目的所有安装包的名称及内容
python
uv pip freeze > requirements.txt
- 使用如下命令,将wheel包(离线安装包)下载至packages文件夹。
python
pip download -r requirements.txt -d packages
# 同时下载基本的构建工具
# pip download setuptools wheel cython --only-binary=:all: --python-version 3.12 -d packages
# 如果中间有遇到下载下来的包.tar.gz,需要用下面的命令先打包成whl包
import glob
import subprocess
import sys
def build_wheel_with_pip(tar_gz_file, wheel_dir):
"""使用 pip 构建 wheel"""
try:
# 使用 pip wheel 命令直接构建 wheel
result = subprocess.run([
sys.executable, "-m", "pip", "wheel",
tar_gz_file,
"-w", wheel_dir,
"--no-deps" # 不处理依赖关系
], capture_output=True, text=True)
if result.returncode == 0:
print(f"成功构建: {tar_gz_file}")
print(f"输出: {result.stdout}")
return True
else:
print(f"构建失败: {tar_gz_file}")
print(f"错误信息: {result.stderr}")
return False
except Exception as e:
print(f"处理失败: {tar_gz_file} - 错误: {e}")
return False
def build_wheels_from_tar_gz():
# 查找所有 tar.gz 文件
tar_gz_files = glob.glob("packages/*.tar.gz")
if not tar_gz_files:
print("未找到 .tar.gz 文件")
return
print(f"找到 {len(tar_gz_files)} 个 .tar.gz 文件:")
for file in tar_gz_files:
print(f" - {file}")
wheel_dir = "packages"
# 为每个 tar.gz 文件构建 wheel
success_count = 0
for tar_gz_file in tar_gz_files:
print(f"\n正在处理: {tar_gz_file}")
if build_wheel_with_pip(tar_gz_file, wheel_dir):
success_count += 1
else:
print(f"构建失败: {tar_gz_file}")
print(f"\n总共处理 {len(tar_gz_files)} 个文件,成功 {success_count} 个")
if __name__ == "__main__":
build_wheels_from_tar_gz()
- 在离线服务器安装python(python版本一定要与开发虚拟环境一致)
python
py -3.12 -m venv .venv # py -python版本 venv 虚拟环境名称
- 激活python虚拟环境
python
# Windows系统下
.venv\Scripts\Active # 回车
- 离线安装所有依赖
python
pip install --no-index --find-links=packages -r requirements.txt
- 离线服务器导入数据库数据
python
# 准备好.sql文件
# 离线服务器登录mysql
# SHOW DATABASES;
# CREATE DATABASE db1 CHARACTER SET utf8mb4;
# USE db1;
# SHOW TABLES;
# SOURCE D:\xujiamiao\AT168_QS_MV_safety_Check\flux-backend\test\boms\s.sql; # 导入数据库数据
- 离线服务器准备好redis
python
# Windows系统
# 如果redistribution报Authentication required,就需要删除对应conf文件中的requirepass字段或者代码里面加上对应的password
# 如果是把redis注册成Windows服务,那么redis读取的文件就是redis.windows-service.conf
# 如果是直接启动的,那么redis读取的文件 就是redis.windows.conf