python - 激活 Python 虚拟环境并在另一个 Python 脚本中调用 Python 脚本
问题描述
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。
如何运行使用 VE1 的 python 脚本 1 并调用另一个 python 脚本(使用 VE2 的脚本 2)。
我在不需要更改虚拟环境的情况下找到了此代码。
import os
os.system("python myOtherScript.py arg1 arg2 arg3")
我唯一的想法就是导航到目标项目并激活 shell:
os.system("cd /home/mmoradi2/pgrastertime/")
os.system("pipenv shell")
os.system("python test.py")
但它说:
/home/........-GdKCBK2j 的外壳已经激活。没有采取任何措施来避免嵌套环境。
我现在该怎么办?事实上,我自己的代码需要 VE1,而子进程(第二个脚本)需要 VE2。如何在我的代码中调用第二个脚本?
此外,第二个脚本用作接受带有标志的输入的命令行工具:
python3 pgrastertime.py -s ./sql/postprocess.sql -t brasdor_c_07_0150
-p xml -f -r ../data/brasdor_c_07_0150.object.xml
我如何使用@tzaman 的解决方案来调用它
解决方案
每个 virtualenv 都有自己的python
可执行文件,您可以直接使用它来执行脚本。
使用子进程(比 更通用os.system
):
import subprocess
venv_python = '/path/to/other/venv/bin/python'
args = [venv_python, 'my_script.py', 'arg1', 'arg2', 'arg3']
subprocess.run(args)
推荐阅读
- javascript - 收件人地址需要带有 JavaScript 的 gmail api
- oracle - 在没有 JavaScript 的情况下将 Oracle PL/SQL 移植到 Snowflake
- python - 从 Django 中的 for 循环创建新的 for 循环
- windows - REG_BINARY 在 Windows 注册表中可以有多大?
- node.js - 从 mongoose 的数组中按 id 删除对象
- javascript - 在 React 中并排放置每个 div 的 2 个元素
- javascript - 触发后如何取消 setTimeout 操作?
- excel - 有关加快此代码的任何建议?
- vue.js - vue数据中声明的数字不能小于0
- reactjs - 如何创建 redux 操作成功和错误回调以触发反应组件处理程序?