如何通过.sh脚本在pipenv虚拟环境中运行.py文件并解决子shell阻塞问题
问题解决方法
核心原因
pipenv shell的设计逻辑是启动一个交互式子shell,父脚本会等待该子shell手动退出后才会执行后续命令,你遇到的现象是正常的设计结果,并非代码报错。
可用解决方案
- 方案1(最推荐):直接使用
pipenv run执行目标命令,完全不需要启动交互式子shell
修正后的run.sh内容如下:
如果你已经在Pipfile的#!/bin/bash # 切换到项目根目录,绝对路径不需要加前缀./ cd /home/.../myprojects # 直接在虚拟环境中运行你的python脚本 pipenv run python myfile.py[scripts]块中自定义了脚本(比如my_script = "python myfile.py"),直接把最后一行替换为pipenv run my_script即可,无需其他修改。 - 方案2:如果需要在虚拟环境中执行多条命令,可通过子shell输入重定向实现自动执行
脚本内容参考:#!/bin/bash cd /home/.../myprojects pipenv shell << EOF # 以下命令都会自动在虚拟环境中按顺序执行,无需手动操作 python myfile.py # 可添加更多需要执行的命令 EOF
内容的提问来源于stack exchange,提问作者Federico Perez Diduch
相关产品推荐
相关产品推荐

