mysql+flask项目U盘硬盘打包个人记录总结

首先,为什么是将项目打包到u盘而不是用docker和虚拟机呢?
因为要求不能联网和要求即插即用…
主要因为便携性和简单性。U 盘便于快速在其他设备上使用,无需额外安装软件,占用系统资源少,且文件组织简单,可以确保环境一致性。Docker和虚拟机需要在目标机器上预先安装 Docker 或虚拟化软件,并且需要联网。
这种方法在很多领域并不实用,本博客仅为项目经历记录。

首先在u盘创建一个文件夹,在这个文件夹下存放所有的环境和项目代码。

mysql打包(手动配置MySQL)

下载便携版的mysql

MySQL官网link下载MySQL的zip版本(根据项目需要版本选择)解压到创建的项目文件夹目录下
在这里插入图片描述

手动配置my.ini文件

手动配置my.ini文件(指定数据目录、端口等)
在mysql目录下创建一个my.ini(或 my.cnf)文件(可以从记事本创建)
在这里插入图片描述

my.ini文件内容如下,根据个人需要修改
在这里插入图片描述

[mysqld]
# 数据目录,自行创建文件夹
datadir=./data
# MySQL使用的端口号,默认是3306
port=3306
# 绑定本地IP,限制外部访问
bind-address=127.0.0.1
# 设置默认字符集为utf8mb4
character-set-server=utf8mb4
# 禁用符号链接(在Windows上是默认行为)
symbolic-links=0
# 日志
log-error=./mysql-error.log
max_connections=100

打开命令行并导航到MySQL的 bin 目录:

cd U盘路径/mysql/bin

运行以下命令来初始化MySQL的数据目录:

mysqld --initialize --user=mysql --datadir=U盘路径\mysql-8.0.40\data --console

以本人电脑为例,实际运行的命令为以下:

cd E:\XXX\mysql-8.0.40\bin
mysqld --initialize --user=mysql --datadir=E:\XXX\mysql-8.0.40\data --console

然后控制台会输出一个临时生成的MySQL root密码(记下这个密码)并创建数据目录,data 文件夹中会包含MySQL所需的数据库文件。
比如本人命令行显示如下:

2024-10-24T06:21:38.197887Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 7t(0e%X*Zp//

然后手动修改root密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '你修改的密码';

测试从终端中启动u盘里的mysql

首先关闭本机的MySQL服务:
搜索“服务”,打开
在这里插入图片描述

如果MySQL为正在运行状态,点击“停止此服务”
在这里插入图片描述
打开命令行输入以下,查看3306端口有没有被占用,或者在my.ini设置u盘里的MySQL为其他端口号。

netstat -ano | findstr 3306

如果3306端口没有进程,命令行输入如下,启动u盘里的MySQL

cd U盘路径/mysql/bin
mysqld --defaults-file=../my.ini --datadir=../data

比如本人的终端输入为

cd E:\XXX\mysql-8.0.40\bin
mysqld --defaults-file=E:\XXX\mysql-8.0.40\my.ini --datadir=E:\XXX\mysql-8.0.40\data

再新开一个命令行,输入netstat -ano | findstr 3306查看MySQL是否启动成功,或者输入以下命令看是否能成功登录

mysql -u root -p你的密码

比如本人电脑输入如下

mysql -u root -p123456

注意:u盘读写速度较慢,可能需要等待很久,建议使用硬盘或者直接将整个MySQL文件夹复制到需要移植的电脑上…

停止MySQL服务:在启动MySQL的命令行页面按ctrl+c停止,或直接叉掉命令行。

导入项目的数据库

本人直接用可视化工具HeidiSQL导出了项目的sql文件。
采用之前的方法启动u盘里的MySQL并登录,在进入MySQL命令行后,使用以下命令导入SQL文件:

SOURCE 你的文件路径/XXX.sql;

比如本人输入如下

SOURCE E:/XXX/XXX.sql;

注意确保路径正确,在SOURCE命令中使用正斜杠 /或双反斜杠 \\表示路径
如果你的sql文件里没有包含建库操作,需要先MySQL命令行创建数据库。
运行结果的数据文件存储在配置的数据目录中,即my.ini文件中指定的datadir路径。

python环境打包(手动配置python环境)

下载便携版的python

访问 Python官方网站 link(通过手动解压来实现便携版):
网址https://www.python.org/downloads/windows/
下载项目所需要的Python版本(Windows下建议下载Windows embeddable package)
在这里插入图片描述
解压到u盘或者硬盘的项目目录下
在这里插入图片描述
下载完成后解压到U盘即可使用。该版本不需要安装,可以直接运行Python解释器。

安装原项目的相关依赖

首先激活原项目的虚拟环境后运行如下命令

pip freeze > requirements.txt

生成的requirements.txt文件位于当前目录下,文件内容将包含当前虚拟环境中的所有包和对应的版本号。

再下载项目相关依赖,输入如下命令,

u盘路径\python39\python -m pip install -r u盘路径\requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

例如本人输入的命令如下

E:\XXX\python39\python -m pip install -r E:\XXX\requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

这里使用镜像网址 https://mirrors.aliyun.com/pypi/simple/ 来加速下载。

flask前后端打包

确保项目代码中所有涉及路径的部分都改为相对路径,模型文件下载到本地后改为相对路径。
我这个项目是前后端不分离的,我直接暴力将整个项目复制到u盘的项目路径下了…

u盘里所有文件结构如下:
在这里插入图片描述
编写启动脚本文件start.bat如下:

@echo off
chcp 65001 >nul

REM 获取当前脚本所在的完整路径
set PROJECT_PATH=%~dp0

:start_mysql
start "" "%PROJECT_PATH%mysql-8.0.40\bin\mysqld" --defaults-file="%PROJECT_PATH%mysql-8.0.40\my.ini" --datadir="%PROJECT_PATH%mysql-8.0.40\data"

REM 等待 MySQL 启动成功
timeout /t 5 >nul

REM 设置便携版Python路径
echo Setting up Python environment...
set PATH=%PROJECT_PATH%\python39;%PATH%

REM 进入Flask项目的根目录
cd /d %PROJECT_PATH%\项目名称

REM 启动Flask应用
echo Starting Flask application...
python manage.py runserver

REM 保持窗口打开
pause

注意1:脚本启动时需要从服务里关闭本机的MySQL(如果本机已装配MySQL)

注意2:如果MySQL在u盘里,启动时间较长,可能会出现MySQL还未启动flask项目启则会报错OperationalError: (2003, “Can’t connect to MySQL server on ‘localhost’ ([WinError 10061] 由于目标计算机积极 拒绝,无法连接。)”)

注意3:在u盘安装原项目的相关依赖后,在u盘运行该项目可能会显示No module named ‘包名称’
终端输入如下

E:\XXX\python39\python -m pip list findstr 包名称

会显示有包的名称,版本号,路径。
在代码中修改import的包的名称和路径即可

注意4:cv2是OpenCV的一个模块,应该使用 opencv-python 来安装它,而不是直接使用 cv2

pip install opencv-python

补充

报错1:
Traceback (most recent call last):
File “x:xxx\manage.py”, line 1, in
from project import create_app
ModuleNotFoundError: No module named ‘project’
python 无法找到名为 project 的模块,因该项目为移植,python不在移植电脑的环境变量里。
在 项目的manage.py 文件开头,手动将项目的根目录添加到 Python 的搜索路径

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

报错2:
移植后的软件显示ModuleNotFoundError: No module named ‘MySQLdb’
可以改用 PyMySQL 作为 MySQL 的驱动
项目manage.py中添加以下代码

import pymysql
pymysql.install_as_MySQLdb()

报错3:
项目里的一个深度学习模块,运行显示No module named ‘包名称’,找不到模型文件。
终端运行以下

python -m pip show 模块

会显示 .egg-link 文件的位置,该文件内容包含项目路径。终端打印Editable project location: xxx\xxx…(模型的文件路径)
在import模型的代码前添加以下

import sys
sys.path.append('模型的文件路径')

我这里用的是相对路径:

import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '模型名称'))

不再报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值