PharmaPy 干法制粒二次开发教程(1):PharmaPy 是什么,干法制粒二次开发为什么值得做——框架能力边界的空白地带

📅 发布时间:2026/10/16 12:05:54
PharmaPy 干法制粒二次开发教程(1):PharmaPy 是什么,干法制粒二次开发为什么值得做——框架能力边界的空白地带
PharmaPy 干法制粒二次开发教程1PharmaPy 是什么干法制粒二次开发为什么值得做——框架能力边界的空白地带版本声明块工具/软件CryPTSys/PharmaPyBSD-3-ClausePurdue FDA语言/环境Python 3.9官方指定 scipy1.14 / numpy2 / assimulo3.4.3本文目标一句话读完全篇你能说清 PharmaPy 的能力边界在哪里以及为什么干法制粒三件套必须二次开发一句话结论PharmaPy 官方仓库 CryPTSys/PharmaPy普渡大学 CryPTSys Lab 出品BSD-3-Clause受美国 FDA 支持只覆盖原料药drug substance侧单元操作公共分支上不存在任何 feeder / blender / roller compactor / mill / tablet press 等固体制剂drug product单元因此干法制粒的辊压、粉碎整粒、颗粒分级必须全部二次开发本系列正是要在其群体平衡模型PBM基础设施之上从零实现这三件套并接入SimulationExec的 flowsheet 流程。〇、本篇要解决的认知问题PharmaPy 到底是什么是谁在维护定位是通用仿真工具还是制药制造系统专用仿真库为什么说官方仓库只覆盖原料药侧——固体制剂单元真的一个都没有吗证据在哪里干法制粒在固体制剂连续制造里到底有多重要值得为一个空白投入二次开发吗QbD / CQA / CPP 是什么为什么输出 PSD 颗粒强度 细粉占比这件事值得建模预测本系列 20 篇最终要交付的干法制粒数字孪生长什么样跟官方框架是什么关系一、机制解析1.1 先建立能力边界心智模型是入门篇的第一课在开始任何二次开发之前你最需要做的不是写代码而是画清楚一张地图框架给了你什么没给你什么。这张地图就叫能力边界它决定了你的活儿从哪开始、该复用什么、该新造什么。对 PharmaPy 来说答案异常干净也异常苛刻官方公开仓库master/develop 分支只覆盖 drug substance原料药侧——反应器、结晶器、蒸发、蒸馏、萃取、干燥、固液分离、三相沉降。而drug product固体制剂侧一个单元都没有feedr、blender、roller compactor、mill、tablet press 全都不存在。为什么这对你重要因为如果你误以为 PharmaPy自带干法制粒你会抱着现成RollerCompactor(…, …)类去查文档、去问 API然后一无所获、浪费时间。反之一旦你接受了这里是空白这个心智模型你就知道你要做的不是调参而是在官方既有的 PBM 基础设施之上新增一个真正的单元操作类。这正是本系列的核心价值。ttps://editor.csdn.net/md?not_checkout1上图左侧是官方已覆盖的原料药侧单元右侧是本系列要从零开发的辊压→粉碎整粒→颗粒分级三件套。注意右侧虚线框里没有官方类名——这不是遗漏而是本文要反复强调的空白地带。1.2 PharmaPy 是谁、定位是什么官方仓库是https://github.com/CryPTSys/PharmaPy规范名请记牢常见误写pharmapy/PharmaPy 2.0混用后面 FAQ 会专门纠错。它的开发者是 Daniel Casas-Orozco、Daniel J. Laky、Inyoung Hur 等PI 是普渡大学 Zoltan K. Nagyco-PI 是 Gintaras V. Reklaitis支持方包括 Purdue CryPTSys Lab 与美国 FDA。许可证为 BSD-3-Clause 风格并含一条 Purdue 增强条款公开 Enhancement 时需授予 Purdue 永久免费许可。为什么这对你重要因为它不是某个民间爱好者的工具而是有学术团队维护、有 FDA 参与、有对象化设计的制药制造系统专用仿真库。你在这上面做的二次开发走的是工业界 学阀都认可的体系代码风格、关系、moments/distrib双表示这些约定都是成体系的值得你把时间和技能投进去。它自己的定位README 原文写得很清楚“PharmaPy is a pythonic library for the analysis of pharmaceutical manufacturing systems. It allows to simulate the dynamics of standalone, drug substance unit operations in a variety of operating modes (batch, continuous, semibatch). Also, PharmaPy facilitates setting up and simulating pharmaceutical flowsheets, i.e., interconnected unit operations…”为什么这对你重要注意原文里强调的就是drug substance unit operations。它不是制药仿真万能库而是一个以原料药单元为核心、以flowsheet 连片求解为能力的制药制造系统 pythonic 库。它的 PBM 载体SolidPhase的x_distrib 内部粒径网格坐标 [µm]、distrib 数目密度分布 [#/m³/µm]天然就是为粒径建模准备的——这正是干法制粒最想要的肌肉。1.3 空白到底空在哪证据链我们复述一下事实底账里的判断给初识者一条可自己核实的路径包结构里有什么Reactors.py、Crystallizers.py、Evaporators.py、Distillation.py、Drying_Model.py、Extractors.py/DynamicExtraction.py、SolidLiquidSep.py、ThreePhaseSettler.py——清一色原料药液相/固相处理单元。没有什么没有任何RollerCompactor、Mill、Classifier、TabletPress、Feeder类文件。整个PharmaPy/目录 37 个.py里找不出任何一个固体制剂单元。它给你的颗粒工具包反而是够用的SolidPhase(x_distrib, distrib)承载 PSDmoments矩dim 为 µm^n默认 4 阶distrib离散 bin 的 PBM 状态双表示配合getMoments、convert_distribution、getDistribution这些方法就构成本系列所有粒度模型的地基。为什么这对你重要空白的真正含义不是什么都要从零写数学而是数学模型Johanson / Midoux / Vogel-Peukert / 离散破碎 PBM / Tromp和数值载体坐标 离散 bin都要你来组织但官方已经帮你把用什么数据结构装 PSD、怎么连 flowsheet、怎么解 ODE这层框架做好了。你的活儿是往这层框架里塞单元而不是重造轮子。1.4 一个关键旁证PharmaPy 2.0 论文确实提到固体制剂但仓库里没代码底账里有一条必须讲清楚的重要事实Shahab 等人在 2025ESCAPE-35和 2026PharmaPy 2.0Comput Chem Eng 209:109593的论文里确实提到了新增的 feeder / blender / tablet press 单元案例是10% 对乙酰氨基酚直接压片Direct Compaction——全程没有涉及辊压。为什么这对你重要这很容易让人误以为官方已经在做固体制剂我直接等更新 / 去仓库找现成代码就行。但事实是这两个方向都落空① 这些代码在公开仓库里找不到② 即便存在其案例也是直接压片没有辊压环节。也就是说即便 PharmaPy 将来补上了 feeder/blender/压片机辊压→粉碎整粒→颗粒分级这条干法制粒主线依然是空白。我们的二次开发不是重复劳动而是在时间点上、在工序板块上都切得这块空白。1.5 干法制粒在连续制造中的地位干法制粒RCDG天然适合连续制造CM工序少、无溶剂、无干燥适合湿热敏感 API还能降低粉尘和偏析、提高堆密度。它的 Ribbon 固相分数SF在连续线上已经能做到在线测量与控制。在 21 世纪的固体制剂工艺里螺旋压制的干法制粒几乎是连续线吃粉进、出可压片颗粒的最短路径。为什么这对你重要正因为它在连续制造里地位突出行业才迫切需要一个能在计算机里复现它的仿真模型来支撑 QbD——而这恰恰是空白。做的人少、需求在增长这就是二次开发的价值池。1.6 为什么输出 PSD 颗粒强度 细粉占比值得建模进入质量体系视角。QbD质量源于设计的核心是不靠事后检验而是靠设计空间内可预测。把 CQA关键质量属性和 CPP关键工艺参数连成因果链CQA颗粒粒径分布GSD是辊压-粉碎环节公认的核心 CQARibbon SF/密度是辊压的公认 CQA。CPP辊压的辊速 N_R、螺杆转速 N_S、比压力 SCF、辊间隙 S粉碎的筛网尺寸/类型、转子速、锤型。CPP→CQA 链SCF 越高或间隙越小SF_ribbon 越高、颗粒粒径越大SCF 越高细粉越少。为什么这对你重要这三样——PSD、颗粒强度、细粉占比——正是把工艺参数 ↔ 中间体性质 ↔ 最终可压片性串起来的三根接线。干法制粒的主要缺点是部分损失压片性塑性物料会颗粒硬化预压缩后再变形阻力增大粒度增大会减少结合表面积。如果你能在仿真里预测SCF 某值 → 强度如何、细粉占比如何、PSD 拖尾如何你就能比试错法省下大量物料与时间真正落地 QbD 意义上的设计空间。这就是为什么值得建模。二、完整代码与逐行剖析本篇是入门科普定位但我们直接给你一段能跑的代码一个最小 PharmaPy flowsheet 骨架。它的意义不是做任何计算而是标出后续所有篇目往这里塞干法制粒单元的预留位置。# 01_min_skeleton.py# -*- coding: utf-8 -*- PharmaPy 最小 flowsheet 骨架入门篇演示用 作用打印框架能力清单并搭建一个可挂接干法制粒单元的拓扑壳子。 注意本骨架本身不引入任何官方干法制粒单元—— 官方仓库根本没有这玩意儿这正是本系列二次开发的起点。 frompharmapyimportSimulationExec# 官方仿真执行器本系列干法制粒单元都挂它底下frompharmapy.ReactorsimportCSTR# 仅示例原料药侧单元代表官方已有frompharmapy.PhasesimportLiquidPhase# 液相代表官方已有# ---- 1. 先看清楚框架能力边界在哪里 ----capabilities[原料药侧官方已有Reactors / Crystallizers / Evaporators,原料药侧官方已有Distillation / Drying / Extraction / SolidLiquidSep,固体制剂侧官方空白Feeder / Blender / Roller Compactor,固体制剂侧官方空白Mill / Tablet Press / 颗粒分级 Classifier,]print( PharmaPy 能力边界速查 )forcapincapabilities:print( -,cap)# ---- 2. 最小 flowsheet 骨架拓扑字符串 执行器 ----# 官方范式sim SimulationExec(path_phys, flowsheet图形串)# 我们先用一个官方原料药单元 CSTR 把壳子跑通干法制粒单元稍后替换进来。path_physdata/thermo.json# 物性 JSON以官方 data/ 目录提供的为准flowR01 - HOLD01# 反应器 - 缓冲罐预留后面把辊压/粉碎/分级串进来simSimulationExec(path_phys,flowsheetflow)sim.R01CSTR()# 示例官方 CSTR仅示意执行器用法sim.HOLD01None# 预留位后续篇目在这里放 DynamicCollectorlatent0# 预留计数print(最小 flowsheet 骨架已就绪拓扑 ,flow)print( 从这里开始往 R01 - HOLD01 - ... 的 ... 处依次接入)print( RollerCompactor - Mill - Classifier本系列第 05-12 篇实现)逐行说明from pharmapy import SimulationExecSimulationExec是官方动态仿真执行器path_phys 拓扑串 单元挂载 SolveFlowsheet它是本系列一切单元要接入的总线。能力清单的 print把官方有/官方无写进代码注释和打印里帮你二次核对本文立论而不是轻信文字。sim.R01 CSTR()官方单元挂载范式是sim.单元名.属性 对象这里的HOLD01 None是显式占位——它提醒你官方没有干法制粒单元类的档位正是我们要从本系列第 5 篇开始补齐的。这段代码在本只有可运行示范、不做计算、不 invoke 任何非官方 API符合不编造 API铁律。三、常见认知误区与排查误区 1「ASLembrouck/pharmapy」是不是官方仓库现象GitHub 搜索pharmapy出现别的大小写/组织仓库拿错代码。根因认知不清大小写与归属误认近似名。解法记住规范名唯一是CryPTSys/PharmaPy作者团队是 Purdue CryPTSys Lab。ASLembrouck/pharmapy明确标注为不存在/错误仓库正文与代码注释一律不引。误区 2以为 PharmaPy 自带干法制粒单元。现象到处找RollerCompactor类、读文档查参数一无所获。根因把能仿真制药系统误当包含固体制剂单元。解法回到能力边界——官方只有 drug substance 单元Reactors/Crystallizers/Drying…drug productfeeder/blender/roller compactor/mill/tablet press全无。即便 PharmaPy 2.0 论文提到 feeder/blender/压片机公开仓库也无代码且案例是直接压片、不含辊压。干法制粒三件套必须二次开发。误区 3混淆 drug substance 与 drug product。现象把原料药侧和固体制剂侧的单位混为一谈以为结晶是干法制粒的一部分。根因对制药制造链的两个阶段边界不熟。解法drug substance 反应/结晶/蒸发/蒸馏/萃取/干燥/固液分离PharmaPy 覆盖drug product 加料/混合/辊压/粉碎/压片/包衣PharmaPy 空白。干法制粒在 drug product 侧跨不过这个边界。误区 4pip install pharmapy装不上怀疑自己配错了。现象pip 找不到pharmapy包或版本冲突。根因PharmaPy不发布到 PyPI官方明确 “you must use the source code”且依赖assimuloSUNDIALS 封装只能 conda-forge 安装。解法走官方安装流程——conda 建 Python 3.9 环境conda install -c conda-forge --file requirements.txtnumpy2、scipy1.14、assimulo3.4.3再python setup.py develop最后cd tests python reactor_tests.py验证。这一步第 2 篇详述。误区 5把「认证版本」与「官方版本」混淆/ 误把细粉质量标准当普适断言。现象在网上看到PharmaPy 2.0或细粉必须 10%就当官方结论写进文档。根因版本演进与工艺阈值没有溯源。解法PharmaPy 2.0是 2026 论文提法公共仓库仍未含固体制剂代码且其案例无辊压细粉 10%属示例/企业内控口径不作为通用质量标准断言。所有数值标注可溯源至本文结尾的官方 URL。四、动手练习练习 1画出社区图谱。任务阅读官方仓库https://github.com/CryPTSys/PharmaPy的 README 与PharmaPy/目录下面的.py文件名自己手写一份官方已有 vs 官方空白的两栏清单。可验证判定你的已有栏至少含 Reactors/Crystallizers/Evaporators/Distillation/Drying/Extraction/SolidLiquidSep/ThreePhaseSettler 这些词空白栏含 Feeder/Blender/RollerCompactor/Mill/TabletPress且两栏无一混淆。练习 2跑通最小骨架。任务把二、完整代码那段保存为01_min_skeleton.py在你已配好或准备配好Python 3.9 PharmaPy 的环境里运行它观察能力清单打印与拓扑串输出。可验证判定程序不报ModuleNotFoundError对pharmapy的 import 成功并在终端看到capabilities的五行输出与最小 flowsheet 骨架已就绪拓扑 R01 - HOLD01。练习 3当一名证据稽查员。任务拿本文 FAQ 的几点说法去https://pharmapy.readthedocs.io/en/latest/与官方 README 里各自找到一处原文佐证例如 README 里的“drug substance unit operations”原句。可验证判定你能给自己或同伴 1 句话复述框架定位原文出自哪里、能力边界原句出自哪里并能指认本文引用的 5 条官方 URL 各对应哪个观点。五、小结与下一篇预告PharmaPyCryPTSys/PharmaPy是普渡 CryPTSys Lab 出品的制药制造系统仿真库只覆盖原料药侧单元固体制剂侧全空白。干法制粒三件套辊压、粉碎整粒、颗粒分级连同其数学建模必须在官方 PBM 基础设施上二次开发。干法制粒在连续制造中的核心地位、QbD 下 PSD 颗粒强度 细粉占比的可预测价值共同构成了这个空白地带的商业与技术价值。你已理解能力边界、掌握最小 flowsheet 骨架也排除了ASLembrouck/pharmapy 是官方仓库“自带干法制粒”pip 可装等常见误区。下一篇第 2 篇将手把手带你搭环境conda 建 Python 3.9 环境、源码安装 CryPTSys/PharmaPy、啃下assimulo这个 conda-only 的坑、跑通官方python reactor_tests.py验证安装为后面塞干法制粒单元打地基。本篇认知问题回显FAQQ1PharmaPy 是由谁开发和维护的开源框架定位是通用仿真工具还是制药专用库APharmaPy 是普渡大学 CryPTSys 实验室PI Zoltan K. Nagy受美国 FDA 支持的制药制造系统pharmaceutical manufacturing systems专用仿真库BSD-3-Clause非通用仿真工具。Q2为什么说官方仓库只覆盖原料药侧固体制剂单元一个都没有A官方仓库 CryPTSys/PharmaPy 的包结构只有 Reactors、Crystallizers、Evaporators、Distillation、Drying、Extraction、SolidLiquidSep 等全无 feeder、blender、roller compactor、mill、tablet press 类故固体制剂单元确实缺失。Q3干法制粒三件套辊压/粉碎整粒/颗粒分级官方有现成实现吗A官方没有现成实现。即便 PharmaPy 2.0 论文提到 feeder/blender/tablet press其案例是直接压片且不含辊压公开仓库也无相关代码因此三件套必须自行二次开发。Q4QbD/CQA/CPP 下为什么 PSD 颗粒强度 细粉占比值得建模预测ACQA 要可预测才能在 QbD 设计空间内落地而 CPP如比压力 SCF、辊间隙驱动 CQAPSD、强度、细粉占比建模可省物料试错故这 3 个量正是关联工艺参数与可压片性的关键。Q5本系列最终交付的干法制粒数字孪生跟官方框架是什么关系Q4QbD/CQA/CPP 下为什么 PSD 颗粒强度 细粉占比值得建模预测ACQA 要可预测才能在 QbD 设计空间内落地而 CPP如比压力 SCF、辊间隙驱动 CQAPSD、强度、细粉占比建模可省物料试错故这 3 个量正是关联工艺参数与可压片性的关键。Q5本系列最终交付的干法制粒数字孪生跟官方框架是什么关系A它是建立在官方 PharmaPy 框架之上的二次开发成果——复用其 PBM 基础设施SolidPhase 的 x_distrib/distrib、SimulationExec flowsheet新增辊压、粉碎整粒、颗粒分级单元输入配方/设备/操作、输出 PSD强度细粉报告。