使用Poetry安装qfrm库后运行代码出现依赖与模块缺失问题
问题
我尝试用Poetry在Python中运行一段实现Excel YIELD()功能的代码,依赖qfrm库,代码如下:
from qfrm import Bond def excel_yield(price, par, rate, years, freq): return Bond(par=par, T=years, freq=freq, cpn=rate, yld=None, price=price).yield_to_maturity() print(excel_yield(price=62.254, par=100, rate=1.875/100, years=18, freq=2))
执行poetry add qfrm后生成的pyproject.toml文件如下:
[tool.poetry] name = "fixed-income-annuity" version = "0.1.0" description = "" authors = ["pathikrit <pathikritbhowmick@msn.com>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.9" python-dateutil = "^2.8.2" qfrm = "^0.2.0.27" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
运行poetry run python main.py时先出现yaml模块缺失错误,手动安装pyyaml后,又出现qfrm.Options模块缺失错误。我的Poetry环境正常,安装其他包如python-dateutil可正常使用,请问为何会出现这些问题?
解答
- yaml依赖缺失原因:qfrm库的官方配置里未正确声明pyyaml为依赖项,导致Poetry安装qfrm时不会自动拉取该依赖,只有运行时才暴露缺失问题。
- qfrm.Options模块缺失原因:
- 版本兼容性问题:你安装的0.2.0.27版本可能存在模块结构变更,或发布时打包不完整,遗漏了Options模块文件。
- 安装损坏:安装过程中可能出现文件下载中断、校验失败等情况,导致部分模块文件缺失。
- 内部导入逻辑问题:qfrm库内部的代码可能存在导入路径错误,比如在该版本中Options模块的位置已变更,但其他模块仍沿用旧路径导入。
解决建议:
- 尝试切换qfrm的版本,比如安装更早的稳定版本:
poetry remove qfrm poetry add qfrm==0.2.0.26 - 直接从源码仓库安装,确保模块文件完整:
poetry remove qfrm poetry add git+https://github.com/qfrm/qfrm.git - 手动补全所有缺失依赖:查找qfrm源码中的requirements文件,把所有依赖用Poetry安装,比如:
poetry add pyyaml
内容的提问来源于stack exchange,提问作者pathikrit
相关产品推荐
相关产品推荐

