使用Poetry管理依赖时如何安装nltk依赖并配置到pyproject.toml
可以实现统一管理,但要注意:nltk提供的语料、预训练模型类资源不属于标准Python包,无法直接通过pyproject.toml的常规依赖字段声明安装,需要配合Poetry的自定义脚本能力完成配置:
第一步:先将nltk本身作为项目依赖安装
执行命令poetry add nltk,和安装其他普通Python依赖没有区别。第二步:编写统一的nltk资源下载脚本
在项目目录下新建脚本文件,比如存为scripts/download_nltk_resources.py,脚本里统一声明所有需要的nltk资源,同时加已存在判断避免重复下载,示例代码如下:import nltk import os # 所有项目需要的nltk资源统一列在这里 REQUIRED_NLTK_RESOURCES = [ "omw-1.4", # 后续如果需要punkt、averaged_perceptron_tagger等其他资源,直接往列表里加就行 ] # 如果想把nltk资源存在项目目录而非用户全局目录,可以打开下面这行配置 # PROJECT_NLTK_PATH = os.path.join(os.path.dirname(__file__), "../nltk_data") # nltk.data.path.append(PROJECT_NLTK_PATH) def main(): for resource in REQUIRED_NLTK_RESOURCES: try: # 先检查资源是否已经存在,避免重复下载 nltk.data.find(f"corpora/{resource}") except LookupError: print(f"正在下载缺失的nltk资源: {resource}") # 如果用项目内路径,download方法加参数 download_dir=PROJECT_NLTK_PATH nltk.download(resource) if __name__ == "__main__": main()第三步:在pyproject.toml中注册脚本命令
打开pyproject.toml,添加如下配置,把下载脚本注册为Poetry可执行命令:[tool.poetry.scripts] init-nltk = "scripts.download_nltk_resources:main"配置完成后,所有团队成员拉取代码后,只要执行
poetry install装完Python依赖,再跑一句poetry run init-nltk,就能自动把所有需要的nltk资源下载好,不需要单独记要下载哪些资源名。(可选)实现依赖安装完成后自动下载nltk资源
如果不想让大家手动执行init-nltk命令,可以安装Poetry钩子插件,配置安装/更新依赖后自动触发脚本:- 先执行
poetry self add poetry-plugin-hooks安装钩子插件 - 在pyproject.toml中添加钩子配置:
[tool.poetry.hooks] post-install = "poetry run init-nltk" post-update = "poetry run init-nltk"
配置完成后,每次执行
poetry install、poetry add、poetry update这类会改动依赖的命令,都会自动检查并下载缺失的nltk资源,完全不需要额外手动操作。- 先执行
注意:如果选择把nltk资源存在项目目录下,记得把对应的
nltk_data文件夹加到.gitignore里,不要把体积很大的语料文件提交到代码仓库。
内容的提问来源于stack exchange,提问作者NineWasps

