GitHub Actions中用Papermill构建Notebook时依赖与本地包不可用求助
解决Papermill无法识别Poetry虚拟环境依赖与本地包的问题
核心原因
问题本质是Papermill未正确使用Poetry创建的虚拟环境:要么是全局安装的Papermill调用了系统Python,要么是虚拟环境上下文未传递给Notebook内核,导致依赖和本地包无法被找到。
解决方案1:将Papermill纳入Poetry项目依赖(推荐)
- 把Papermill添加为开发依赖:
poetry add --dev papermill - 重新安装所有依赖,确保Papermill在虚拟环境内:
poetry install -E all - 用
poetry run执行Papermill:
此方式下Papermill会直接使用Poetry虚拟环境的Python解释器,自动识别所有已安装的依赖和本地包。poetry run papermill SomeNotebook.ipynb output_folder/file.txt
解决方案2:为Poetry虚拟环境注册Jupyter内核
若不想将Papermill加入项目依赖,可通过注册内核让Papermill指定使用虚拟环境:
- 激活虚拟环境:
source $(poetry env info --path)/bin/activate - 安装ipykernel到虚拟环境:
pip install ipykernel - 将虚拟环境注册为Jupyter内核:
python -m ipykernel install --user --name=poetry-env --display-name="Poetry Virtual Env" - 运行Papermill时指定该内核:
或配合papermill --kernel poetry-env SomeNotebook.ipynb output_folder/file.txtpoetry run确保上下文正确:poetry run papermill --kernel poetry-env SomeNotebook.ipynb output_folder/file.txt
解决方案3:绕过poetry shell直接执行命令
poetry shell报Inappropriate ioctl for device多因非交互式终端环境导致,可直接调用虚拟环境的Python执行Papermill:
$(poetry env info --path)/bin/python -m papermill SomeNotebook.ipynb output_folder/file.txt
该命令直接使用虚拟环境的Python运行Papermill模块,完全绕开shell激活问题。
验证依赖可用性
执行完上述方案后,先验证虚拟环境的依赖是否正常加载:
poetry run python -c "import pandas; from mypackage.plots import *; print('Dependencies loaded successfully')"
若命令执行成功,说明依赖配置无误,再运行Papermill即可正常工作。
内容的提问来源于stack exchange,提问作者Layik
相关产品推荐
相关产品推荐

