如何在 Python 脚本中使用 "virtualenv.cli_run" 方法创建虚拟环境?

How do I use the "virtualenv.cli_run" method in a Python script to create a virtual environment?

我有一个 Python 脚本,可以通过以下方式创建虚拟环境:

import os
import subprocess

virtualenv_path = os.path.join("/tmp", "my-environment")
subprocess.run(["virtualenv", virtualenv_path], check=True)

这很好用。然而,在 Virtualenv documentation 中,我看到您可以“从 Python 中触发对 Python 环境的调用”。要做到这一点“你应该使用 virtualenv.cli_run 方法;这需要一个 args 参数,你可以在其中传递选项,就像从命令行一样。运行 将 return a包含有关创建的虚拟环境的数据的会话对象。"

所以我 运行 改为:

from virtualenv import cli_run

cli_run(["virtualenv", "/tmp/my-environment"])

但是这给了我以下错误:

usage: virtualenv [--version] [--with-traceback] [-v | -q] [--read-only-app-data] [--app-data APP_DATA] [--reset-app-data] [--upgrade-embed-wheels] [--discovery {builtin}] [-p py] [--try-first-with py_exe]
                  [--creator {builtin,cpython3-posix,venv}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list] [--clear] [--no-vcs-ignore] [--system-site-packages] [--symlinks | --copies] [--no-download | --download]
                  [--extra-search-dir d [d ...]] [--pip version] [--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--no-periodic-update] [--symlink-app-data] [--prompt prompt] [-h]
                  dest
virtualenv: error: unrecognized arguments: /tmp/my-environment
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

我真的不确定为什么这不起作用,因为我传递的参数与在命令行上传递的参数相同。

当您将 cli_run 作为 virtualenv 的一部分调用时,您不需要包含程序名称,在本例中为“virtualenv”。只需包括您的目的地以及任何其他参数。