Python Compose,一个用于同时启动多个长时间运行的Python服务的工具。
项目描述
Python Compose
Python Compose是一个用于在隔离的Python环境中启动多个长时间运行的Python应用程序的命令行工具和库。受Docker Compose的启发,Python Compose旨在提供类似的功能,而不需要依赖于Docker容器、网络等。
目前,Python Compose支持以下环境
未来,我们希望支持
安装
使用包管理器pip安装python-compose
。
pip install python-compose
目前,Python Compose支持venv
、pyenv-virtualenv
和conda
环境。pyenv-virtualenv
和conda
管理器不是与Python Compose一起安装的。要安装它们,请遵循pyenv-virtualenv和conda文档中的说明。
概念
单元
一个单元
是一个对象,它表示如何为特定类型的Python环境处理程序创建、运行和清理服务。示例可以在python_compose/unit目录中找到。
YAML规范
Python 编译器目前只能从 YAML 文件中实例化,该文件由内部 spec.py Python 文件派生。Python Compose YAML 文件期望一个顶层键 units
,它映射到一个 units
列表,即要运行的 Python 脚本。每个单元的环境由键 unit_type
描述。一个单元将具有不同的参数,有些是必需的,有些是可选的。同样,这些定义在 spec.py 中。
替代方案比较
Python Compose 不是世界上唯一的此类任务工具。如果您只在一个 Python 环境中工作并希望最小化外部工具和依赖项,那么它可能是一个方便的工具。以下是 Python Compose 与其他解决方案的比较表。
工具 | 操作系统 | 虚拟网络 | 运行非 Python 程序的能力 | 支持多个 Python 版本 | 需要非 Python 依赖项 |
---|---|---|---|---|---|
Python Compose | Linux/MacOS | ❌ | 使用 Conda 或 subprocess | ✅ | ❌ |
Python Multiprocessing | Linux/MacOS/Windows | ❌ | 使用 subprocess | ❌ | ❌ |
Docker Compose | Linux/MacOS/Windows | ✅ | ✅ | ✅ | ✅ |
Systemd 单元文件 | Linux | ❌ | ✅ | ✅ | ✅ |
Bazel | Linux/MacOS/Windows | ❌ | ✅ | ✅ | ✅ |
示例
我们在 examples
目录中提供了许多如何使用 Python Compose 作为库和命令行工具的示例。以下是我们将假设的最像 Docker Compose 的使用案例,从单个配置文件启动许多后端服务。
在目录中创建一个 Python 脚本,httpd.py
,它启动一个 HTTP 服务
import argparse
from http.server import BaseHTTPRequestHandler, HTTPServer
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("port", type=int)
args = parser.parse_args()
print(args)
server_address = ("", args.port)
httpd = HTTPServer(server_address, BaseHTTPRequestHandler)
httpd.serve_forever()
然后,创建一个 yaml 文件,config.yaml
,以在多个环境中启动此后端服务
units:
- unit_type: "venv"
name: "httpd_0"
env_dir: "./.envs"
script_path: "./httpd.py"
script_args: ["8080"]
- unit_type: "venv"
name: "httpd_1"
env_dir: "./.envs"
script_path: "./httpd.py"
script_args: ["8081"]
- unit_type: "pyenv-virtualenv"
name: "httpd_2"
py_version: "3.10"
script_path: "./httpd.py"
script_args: ["8082"]
- unit_type: "conda"
name: httpd_3
script: ["python3", "../conda/httpd.py", "8083"]
要启动所有容器,请运行
python3 -m python-compose config.yaml
要退出,请按 <Ctrl-C>
。
贡献
欢迎拉取请求。对于重大更改,请首先提交问题以讨论您想要更改的内容。
请确保根据需要更新测试。
设置您的开发环境。
开发者应首先安装所有必需的开发依赖项
pip3 install -e '.[dev]'
然后进行所有所需的更改
添加新单元
要添加新 unit
,您首先需要将单元添加到 python_compose/unit。然后,将示例添加到示例目录,并最终更新 spec.py。
测试
要测试 Python 编译器,请在安装所有开发依赖项后运行 pytest
。
许可证
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。