第4章 吸收(A)指标:溶解度(pH依赖性)与LogD
做药物化学的,没人不知道溶解度跟LogD这两个参数。但我发现,很多新手容易把它们当成两个孤立指标来测——溶解度只测一个pH,LogD只看一个数值。这其实是个大坑。我常说,吸收这两个字,本质就是"溶出来"和"穿过去"的平衡,而pH是贯穿始终的那根线。
这章咱们就专门把这两个指标掰开了讲。我会结合项目里踩过的坑,把溶解度为什么要有pH依赖性、LogD到底比LogP好在哪,以及它俩怎么配合着看,一次说清楚。
4.1 溶解度:别只测一个pH
溶解度的定义很简单:一定条件下,单位溶剂能溶解的最大药量。但问题在于,胃肠道不是一个恒定pH的环境。胃里pH 1~3,小肠pH 5~7.5,结肠能到pH 8。如果一个化合物只在酸性条件下溶,到小肠就析出,那你溶出曲线做得再漂亮,体内暴露量一样上不去。
我在项目里遇到过这样一个分子:体外pH 1.0溶解度高达 2 mg/mL,大家都很兴奋,觉得生物利用度肯定没问题。结果大鼠 PK 一做,AUC 低得可怜。后来一查,在pH 6.8 下溶解度只有 0.01 mg/mL——药物从胃到小肠的瞬间就析出了一大半。从那以后,我要求团队必须至少测三个pH点的溶解度:pH 1.0、pH 6.8、pH 7.4。
pH依赖性溶解度可以用下面这个关系来理解:
- 弱碱性药物:在低pH下电离,溶解度大;高pH下呈分子态,溶解度小。
- 弱酸性药物:在高pH下电离,溶解度大;低pH下呈分子态,溶解度小。
- 中性化合物:基本不受pH影响,但往往绝对溶解度偏低。
这里有个实用工具——固有溶解度(S₀):指完全不电离的分子态溶解度,是pH依赖性曲线的"锚点"。有了S₀和pKa,你就可以预测任意pH下的溶解度。
4.2 LogD:比LogP更懂生理环境
LogP是分配系数的对数,描述的是分子在正辛醇和水之间的分配——说白了就是"亲脂性有多强"。但LogP有个问题:它只测中性分子的分配。可药物分子在生理pH下很可能部分电离,这时候LogP就没法反映真实情况了。
所以有了LogD。LogD是在特定pH下测得的分配系数,公式简单说就是:
LogD(pH) = LogP - log₁₀(1 + 10^(pH - pKa)) (适用于一元酸)
我个人习惯把LogD叫做"真正干活的那个Log"。因为它对应的是胃肠道那个pH环境下的真实亲脂性。你看Lipinski规则里写的是LogP ≤ 5,但现在工业界内部做评估,基本都是看LogD₇.₄(pH 7.4下的LogD)。
举个例子你就明白了:
| 化合物 | LogP | LogD₇.₄ | 透膜性 | 实际口服暴露 |
|---|---|---|---|---|
| 分子A (弱酸,pKa 4.5) | 3.0 | 1.2 | 中 | 高 |
| 分子B (中性) | 3.0 | 3.0 | 高 | 低 (溶解度差) |
| 分子C (弱碱,pKa 8.0) | 3.0 | 0.5 | 低 | 低 |
看到没?三个分子LogP一样,但LogD₇.₄天差地别。分子C在pH 7.4下几乎全电离,亲脂性极低,透膜性自然不行。这就是为什么我总说LogP是实验室数据,LogD才是生理数据。
- LogD > 3 → 亲脂性偏高,溶解度容易出问题,代謝可能加快
- LogD 1~3 → 口服药物的"甜蜜点",透膜与溶解相对平衡
- LogD < 1 → 亲水性太强,透膜性可能是瓶颈
4.3 溶解度与LogD:一对天生的冤家
你想想看,溶解度要求分子亲水,LogD要求分子亲脂——这两个指标天然就是矛盾的。但药物既要能溶到胃肠液里,又要能穿过细胞膜,所以你必须找到一个平衡点。
我记得有个项目,优化一个GPCR靶点的先导化合物。团队一直在提高LogD来改善透膜性,LogD从1.5做到了3.2,Caco-2数据确实漂亮了很多。但溶解度从200 µM掉到了2 µM以下,体内PK一做,暴露量反而下降了。后来我们回头把LogD调到2.5左右,同时引入一个弱碱性基团,在胃里溶解度很高,到小肠虽然溶解度降了一些,但透膜性刚好够用。最终那个化合物成了临床候选物。
这个案例让我深刻明白一件事:不要单独优化溶解度或LogD,要看它们的"动态匹配"。具体来说,有以下几条经验:
- 先看pKa:知道化合物在胃肠道的电离窗口,才能预测溶出和吸收的位置。
- 看溶解度曲线形状:pH依赖溶解度变化如果太陡(跨越超过3个数量级),体内变异度会很大。
- LogD优先看pH 6.8和7.4:这两个pH对应小肠和血液,是吸收和分布的关键。
- 用"溶解-透膜乘积"做排序:我个人会用溶解度(µM)× LogD₆.₈ 做初步排序,数值越高,成药潜力越大(当然要结合具体靶点调整)。
4.4 实战:用代码快速评估pH依赖性
最后,我分享一个自己常用的Python小脚本。它可以快速计算不同pH下的LogD,帮你判断一个化合物是否存在"pH陷阱"。
import math
def logd_at_ph(logp, pKa, pH, acid=True):
"""
Calculate LogD at given pH.
acid=True for weak acids, False for weak bases.
"""
if acid:
# 弱酸:高pH下电离,LogD降低
return logp - math.log10(1 + 10**(pH - pKa))
else:
# 弱碱:低pH下电离,LogD降低
return logp - math.log10(1 + 10**(pKa - pH))
# 示例:一个弱酸 (LogP=3.0, pKa=4.5)
print("弱酸 LogP=3.0, pKa=4.5")
for pH in [1.0, 4.5, 6.8, 7.4]:
ld = logd_at_ph(3.0, 4.5, pH, acid=True)
print(f" pH {pH:.1f} → LogD = {ld:.2f}")
print()
# 示例:一个弱碱 (LogP=3.0, pKa=8.0)
print("弱碱 LogP=3.0, pKa=8.0")
for pH in [1.0, 4.5, 6.8, 7.4]:
ld = logd_at_ph(3.0, 8.0, pH, acid=False)
print(f" pH {pH:.1f} → LogD = {ld:.2f}")
输出结果会让你很直观地看到同一个小分子在不同pH下的亲脂性变化。我建议你把这条代码加到你的化合物筛选流程里,跑一遍只需5秒钟,但能帮你避免很多后期才发现的问题。
Descriptors.MolLogP 拿到LogP,再结合pKa(可以用 pKa_calculator 或实验值)套用上面的公式。虽然没有商业软件那么准,但早期筛选足够用了。
嗯,这一章的内容就到这里。溶解度和LogD是吸收指标里最基础也最容易被低估的两个参数。记住一句话:没有pH意识的ADMET评估,都是在耍流氓。下次你拿到一个化合物的溶解度或LogD数据,先问自己三个问题——这个数据是在哪个pH下测的?胃肠道里这个pH出现在哪一段?我的化合物在那个位置是溶还是析?想清楚这些,你就算真正入了ADMET的门了。