出版社物流WMS智能调度实战(环境准备篇-增补版):Windows与Linux双环境搭建完全指南
出版社物流WMS智能调度实战环境准备篇-增补版Windows与Linux双环境搭建完全指南《出版社物流WMS智能调度实战》系列文章环境准备篇本文Windows Linux双环境完整指南第一篇出版社物流WMS智能调度实战从架构升级到机器学习落地第二篇从“卡死”到“跑通”——机器学习开发排坑记第三篇从“卡死”到“跑稳”机器学习运维监控与自动回滚实战第四篇从表到图销售数据日汇总表可视化实战⚠️本文是原《CentOS 7/麒麟V10完整指南》的增补版新增Windows Conda环境完整搭建步骤并优化了跨平台通用配置。原Linux用户可直接参考本文的Linux章节Windows用户按新增章节操作即可。摘要在出版行业WMS智能调度项目中机器学习服务器的环境搭建是第一步也是最容易踩坑的环节。无论你使用的是Windows开发机还是Linux生产服务器CentOS 7/麒麟V10本文提供完整的、可复现的环境配置指南。涵盖Python 3.9安装Linux源码编译 / Windows Conda、Oracle Instant Client厚模式配置、依赖包版本锁定、跨平台数据库连接配置以及20常见报错的解决方案。按本文操作即使没有运维经验也能在1小时内搭建起可运行的机器学习环境。本文是系列的环境基础后续所有代码和脚本均在此服务器上运行。一、硬件要求1.1 最低配置 vs 推荐配置组件最低配置推荐配置中小仓库说明CPU2核4核特征工程和模型训练涉及大量pandas计算内存4 GB8 GB内存不足会导致swap频繁严重影响性能硬盘50 GB100 GB SSD存放代码、模型文件、日志及历史数据网络1 Gbps1 Gbps与Oracle数据库低延迟互通1521端口1.2 网络要求能够访问Oracle报表库目标库和备库源库防火墙开放1521端口建议使用内网IP连接避免公网延迟1.3 操作系统要求操作系统版本备注Windows10/1164位用于开发测试推荐使用Conda环境CentOS7.x生产环境首选需手动编译Python 3.9麒麟V10基于CentOS 7内核国产化替代兼容CentOS 7命令注意不支持 CentOS 8 / Rocky Linux 8 / AlmaLinux 8 等 glibc 2.28 的系统因为 Python 3.9 在 CentOS 7 上编译的二进制可能不兼容。如需使用建议自行编译。1.4 磁盘空间预估数据/文件类型预估大小说明项目代码 10 MBPython脚本、配置文件虚拟环境1~2 GB包含所有依赖库模型文件 100 MBLightGBM模型文件通常几MB日志文件1~5 GB长期运行累积建议配置logrotate特征表数据取决于数据量报表库存储不在本地二、环境概览与选型建议操作系统适用场景Python版本包管理Oracle模式难度Windows开发测试、个人学习3.9CondaConda厚模式⭐⭐LinuxCentOS 7/麒麟V10生产部署3.9.18源码编译pip厚模式⭐⭐⭐核心原则由于项目需要连接Oracle 11g数据库python-oracledb默认的Thin模式不支持必须使用厚模式并安装Oracle Instant Client。三、Windows环境搭建Conda Thick模式适用人群没有Linux服务器、想在个人电脑上开发调试的开发者。3.1 安装Miniconda从Miniconda官网下载Windows 64位安装包。安装时务必勾选“Add Miniconda to my PATH environment variable”。打开Anaconda Prompt验证conda--version3.2 创建虚拟环境conda create-nwms_mlpython3.9conda activate wms_ml3.3 安装Python依赖# conda安装基础包避免编译condainstallpandas numpy matplotlib seaborn plotly jinja2-cconda-forge# pip安装剩余包pipinstallstatsmodels scikit-learn lightgbm sqlalchemy oracledb为什么不用pip装全部Windows下statsmodels编译常失败conda提供预编译二进制。3.4 安装Oracle Instant Client关键步骤从Oracle官方下载页下载64位Basic包需登录。解压到无空格路径例如C:\oracle\instantclient_19_30。不需要配置系统PATH代码中直接指定路径。3.5 配置数据库连接db_utils.pyimportoracledbimportplatform# 关键必须使用原始字符串 roracledb.init_oracle_client(lib_dirrC:\oracle\instantclient_19_30)# 其余连接代码见文末完整版3.6 Windows常见坑与解决报错原因解决DPI-1047: Cannot locate a 64-bit Oracle Client library路径错误或未调用init检查路径使用rSyntaxWarning: invalid escape sequence \o路径中的\t等被转义使用原始字符串r...statsmodels安装失败缺少编译工具conda install statsmodels中文字体方框matplotlib默认字体不支持plt.rcParams[font.sans-serif] [Microsoft YaHei]四、Linux环境搭建CentOS 7 / 麒麟V104.1 系统准备sudoyum update-ysudoyuminstall-ywgetcurlgitvimhtopnet-tools gcc gcc-cmake\openssl-devel bzip2-devel libffi-devel sqlite-devel关键点sqlite-devel必须安装否则后续 Python 缺少_sqlite3模块导致 pandas 无法运行。4.2 增加 swap 空间内存不足时推荐ddif/dev/zeroof/swapfilebs1Mcount4096chmod600/swapfilemkswap/swapfileswapon/swapfileecho/swapfile none swap sw 0 0/etc/fstab4.3 编译安装 Python 3.9.18CentOS 7 默认 Python 2.7必须手动编译 Python 3.93.10 及以上依赖更高版本 glibc不兼容。cd/usr/srcsudowgethttps://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgzsudotarxzf Python-3.9.18.tgzcdPython-3.9.18sudo./configure --enable-optimizationssudomake-j$(nproc)# 使用所有CPU核心加速sudomakealtinstall# altinstall 不覆盖系统默认 python验证安装/usr/local/bin/python3.9--version# 应显示 Python 3.9.18/usr/local/bin/python3.9-cimport sqlite3; print(sqlite3.sqlite_version)若第二行报错ModuleNotFoundError: No module named _sqlite3说明sqlite-devel未安装或编译时未检测到请重新安装后再次编译。4.4 安装 Oracle Instant Client厚模式python-oracledb默认的 Thin 模式不支持 Oracle 11g必须安装 Instant Client 启用厚模式。4.4.1 下载 RPM 包访问 Oracle Instant Client 下载页面需登录下载以下两个通用版RPM不带.el8/.el9后缀oracle-instantclient-basic-19.30.0.0.0-1.x86_64.rpmoracle-instantclient-devel-19.30.0.0.0-1.x86_64.rpm4.4.2 上传并安装cd/path/to/rpm_filessudoyum localinstall-yoracle-instantclient-basic-*.rpm oracle-instantclient-devel-*.rpm如果提示缺少libaio先执行sudo yum install -y libaio。4.4.3 配置动态链接库echo/usr/lib/oracle/19.30/client64/lib|sudotee/etc/ld.so.conf.d/oracle.confsudoldconfig验证库加载成功ldconfig-p|greplibclntsh应显示类似libclntsh.so.19.1 (libc6,x86-64) /usr/lib/oracle/19.30/client64/lib/libclntsh.so.19.1。4.4.4 设置环境变量可选echoexport LD_LIBRARY_PATH/usr/lib/oracle/19.30/client64/lib:$LD_LIBRARY_PATH~/.bashrcsource~/.bashrc4.5 创建 Python 虚拟环境并安装依赖4.5.1 创建项目目录和虚拟环境mkdir-p/opt/wms_mlcd/opt/wms_ml /usr/local/bin/python3.9-mvenv venvsourcevenv/bin/activate4.5.2 升级 pippipinstall--upgradepip4.5.3 编写 requirements.txt使用兼容 CentOS 7 旧版 GCC 的包版本pandas1.5.3 numpy1.23.5 scikit-learn1.0.2 lightgbm3.3.5 sqlalchemy1.4.0 oracledb1.4.0 python-dateutil2.8.0 matplotlib3.5.3 seaborn0.12.2 plotly5.14.1 jinja23.1.2 statsmodels0.13.5关键点pandas 2.x 需要新版 GCC 编译CentOS 7 默认 GCC 4.8.5 无法编译必须使用 1.5.3 预编译 wheel。numpy 不能使用 2.x否则与 pandas 1.5.3 二进制不兼容。4.5.4 安装依赖pipinstall-rrequirements.txt --only-binary:all:--only-binary强制使用预编译 wheel避免源码编译。4.5.5 验证模块导入python-cimport pandas, lightgbm, sklearn, oracledb, sqlalchemy; print(All modules OK)4.6 Linux常见坑与解决报错原因解决pip install pandas编译失败GCC 4.8.5太旧使用pandas1.5.3 --only-binary:all:ValueError: numpy.dtype size changednumpy 2.x 与 pandas 1.5.3 不兼容pip uninstall numpy -y然后pip install numpy1.23.5ModuleNotFoundError: No module named _sqlite3Python 编译时缺少 sqlite-devel安装sqlite-devel重新编译 PythonDPI-3010: connections to this database server version are not supportedThin 模式不支持 Oracle 11g安装 Instant Client 并调用init_oracle_client()ORA-00942: table or view does not existDBLINK 名称错误或表名大小写检查 DBLINK 名称表名使用大写yum install报 404 错误Oracle 仓库不可用使用--disablerepooracle-instantclient禁用该仓库或手动安装 RPM五、跨平台通用配置db_utils.py完整版以下代码自动检测操作系统适配Windows和Linuximportoracledbimportplatformfromsqlalchemyimportcreate_engine,text,typesimportpandasaspdfromconfigimportTARGET_DATABASE_URL# 根据操作系统动态配置厚模式路径ifplatform.system()Windows:oracledb.init_oracle_client(lib_dirrC:\oracle\instantclient_19_30)else:# Linuxoracledb.init_oracle_client(lib_dir/usr/lib/oracle/19.30/client64/lib)classOracleDatabase:def__init__(self,url):self.enginecreate_engine(url,pool_pre_pingTrue,pool_recycle3600)defquery(self,sql,paramsNone):withself.engine.connect()asconn:returnpd.read_sql(text(sql),conn,paramsparams)defexecute(self,sql,paramsNone):withself.engine.connect()asconn:conn.execute(text(sql),params)conn.commit()defto_sql(self,df,table,if_existsappend,indexFalse,chunksize1000):dtype{col:types.VARCHAR(4000)forcolindf.select_dtypes(object).columns}df.to_sql(table.upper(),self.engine,if_existsif_exists,indexindex,chunksizechunksize,dtypedtype)defcallproc(self,proc_name,params):withself.engine.connect()asconn:cursorconn.connection.cursor()resultcursor.callproc(proc_name,params)conn.commit()returnresult target_dbOracleDatabase(TARGET_DATABASE_URL)配置文件config.py示例TARGET_DB{user:your_user,password:your_password,host:your_host,port:1521,service_name:your_service}TARGET_DATABASE_URLforacleoracledb://{TARGET_DB[user]}:{TARGET_DB[password]}\f{TARGET_DB[host]}:{TARGET_DB[port]}/?service_name{TARGET_DB[service_name]}六、验证环境6.1 基础测试# Windows (Anaconda Prompt)conda activate wms_ml python-cimport pandas, lightgbm, oracledb; print(OK)# Linuxsource/opt/wms_ml/venv/bin/activate python-cimport pandas, lightgbm, oracledb; print(OK)6.2 数据库连接测试python-cfrom db_utils import target_db; print(target_db.query(SELECT 1 FROM DUAL).iloc[0,0])输出1表示成功。七、部署检查清单Python 版本为 3.9.x非 3.10Oracle Instant Client 已安装并配置db_utils.py中正确调用了init_oracle_client()依赖包已安装且无编译错误数据库连接测试通过输出 1中文字体已配置如需生成图表八、总结与下一步本文提供了 Windows 和 Linux 双环境的完整搭建指南。三个关键点需要特别注意Python 版本与编译必须使用 3.9.x编译前安装sqlite-devel。依赖包版本锁定pandas 1.5.3 numpy 1.23.5。Oracle 连接厚模式必须安装 Instant Client 并调用init_oracle_client()。按照本文档操作即使没有 Linux 环境搭建经验也可以顺利完成部署。现在服务器已准备就绪接下来请阅读系列第一篇。资料包领取本文配套资料完整代码、建表SQL、调度脚本已整理关注后私信“WMS环境”即可获取。如果你在搭建过程中遇到任何问题欢迎在评论区留言我会尽快回复。下一篇预告环境准备就绪后请进入系列第一篇出版社物流WMS智能调度实战一从架构升级到机器学习落地。 点击关注我更新后第一时间收到推送