如何在非Shell脚本中于micromamba环境内运行子进程?
解决micromamba不在PATH导致subprocess调用失败的问题
遇到这个报错,本质是系统找不到micromamba可执行文件的位置,给你几个可行的解决办法:
直接使用micromamba的绝对路径
先在终端里执行which micromamba(Linux/macOS)或者where micromamba(Windows),找到它的绝对路径(比如/home/xxx/.local/bin/micromamba),然后把路径替换到subprocess命令里:subprocess.run(["/home/xxx/.local/bin/micromamba", "run", "-n", "my_env", *my_command])手动给subprocess添加PATH环境变量
复制当前系统的环境变量,把micromamba所在目录加到PATH最前面,再传给subprocess:import os import subprocess # 复制现有环境变量 new_env = os.environ.copy() # 替换成你实际的micromamba所在目录 micromamba_dir = "/home/xxx/.local/bin" new_env["PATH"] = f"{micromamba_dir}:{new_env['PATH']}" subprocess.run(["micromamba", "run", "-n", "my_env", *my_command], env=new_env)通过shell模式执行(谨慎使用)
如果你的my_command是可信的、不存在注入风险,可以开启shell=True让系统shell帮你查找路径:# 注意:如果my_command包含特殊字符,需要提前做转义处理 cmd = "micromamba run -n my_env " + " ".join(my_command) subprocess.run(cmd, shell=True)
内容的提问来源于stack exchange,提问作者Valentin Waeselynck
相关产品推荐
相关产品推荐

