odoo-venv là công cụ dòng lệnh nhỏ giúp tạo môi trường ảo Python tách biệt cho Odoo chỉ trong vài giây, với các preset cho phát triển cục bộ, demo, dự án khách hàng và CI.

Cài đặt và chạy Odoo như thế nào? Câu hỏi nghe có vẻ đơn giản, nhưng số câu trả lời hợp lệ có thể nhiều hơn nhiều người nghĩ, tùy vào người được hỏi.

Dưới đây là tổng quan chưa đầy đủ về các cách hiện có:

  • Odoo SA
  • OCA (Odoo Community Association)
    • Cung cấp image Docker để chạy test: oca-ci
    • Đưa các addon OCA lên một pip wheelhouse, nhờ đó có thể cài đặt hoàn toàn bằng pip
  • Các đơn vị tích hợp Odoo

Mỗi cách đều có ưu điểm riêng. Nhưng một thiết lập càng dựa vào nhiều lớp trừu tượng thì việc phát triển trên máy cục bộ càng phức tạp và khó khăn.

Tại Trobz, chúng tôi chọn một cách đơn giản dựa trên môi trường ảo Python: odoo-venv .

Vì sao Trobz chạy Odoo trong môi trường ảo

Trobz ưu tiên chạy Odoo trong môi trường ảo Python (virtual environment). Cách này giúp đội ngũ kiểm soát tốt hơn, nắm rõ hệ thống hơn và linh hoạt hơn khi:

  • Debug lỗi trên máy cục bộ
  • Cần biết chính xác những gói phụ thuộc nào đang được cài
  • Chuyển đổi giữa các phiên bản Odoo hoặc giữa các dự án

Tuy vậy, quản lý thủ công các môi trường này nhanh chóng trở nên mất công, vì mỗi dự án lại có yêu cầu gói phụ thuộc riêng. Đó là lý do chúng tôi xây dựng odoo-venv.

Cách odoo-venv hoạt động

odoo-venv là một công cụ dòng lệnh (CLI) nhỏ, được thiết kế để tạo môi trường Odoo tách biệt chỉ trong vài giây. Công cụ này chuẩn hóa cách Trobz tạo và quản lý các môi trường đó cho nhiều mục đích sử dụng khác nhau.

Tính năng chính

  • Tạo môi trường ảo Python với đúng phiên bản Python
  • Cài các gói phụ thuộc lõi của Odoo
  • Cài các gói phụ thuộc được khai báo trong manifest của addon
  • Quản lý preset cho từng loại dự án Odoo
  • Loại bỏ các gói phụ thuộc gây lỗi hoặc không cần thiết

Tốc độ nhanh

Một trong những ưu điểm lớn nhất của odoo-venv là tốc độ. Bên dưới, công cụ dùng uv , một trình cài đặt gói Python hiện đại và cực kỳ nhanh. Trên thực tế:

  • Theo dự án uv, các thao tác với gói nhanh hơn từ 10 đến 100 lần so với các công cụ truyền thống như pip
  • Có thể lặp lại thao tác nhanh chóng mà không phải chờ pip cài đặt chậm

Tóm lại, odoo-venv kết hợp sự đơn giản của python -m venv với tốc độ của công cụ hiện đại.

Cách sử dụng

Cách đơn giản nhất là truyền tham số trực tiếp trên dòng lệnh:

odoo-venv create 17.0 \
    --odoo-dir ~/code/odoo/odoo/17.0 \
    --python-version 3.10 \
    --extra-requirement "debugpy,ipython"

Lệnh này tạo một môi trường ảo cho Odoo 17.0, trong đó:

  • Dùng Python 3.10
  • Cài Odoo ở chế độ editable
  • Cài các gói phụ thuộc của Odoo
  • Thêm hai công cụ debugpy và ipython

Dùng preset

Với những cấu hình dùng lặp lại, nên dùng preset. odoo-venv có sẵn bốn preset, mỗi preset phù hợp với một mục đích cụ thể.

Local

Chức năng

  • Cài gói phụ thuộc của tất cả module, từ cả file requirements.txt và manifest
  • Kèm các công cụ phát triển như debugpy, ipython, pylint và coverage
  • Bỏ qua geventgreenlet trong requirements của Odoo, vì hai gói này thường gây xung đột phiên bản

Phù hợp cho

  • Phát triển thử nghiệm
  • Làm việc nhanh với các module OCA

Demo

Chức năng

  • Cài gói phụ thuộc của tất cả module hiện có
  • Đảm bảo người dùng có thể cài bất kỳ module nào mà không thiếu gói phụ thuộc

Phù hợp cho

  • Demo cho khách hàng
  • Môi trường UAT

Project

Chức năng

  • Cài các gói phụ thuộc bổ sung được liệt kê trong dự án
  • Giữ môi trường tối giản và dễ dự đoán

Phù hợp cho

  • Môi trường production
  • Dự án riêng của từng khách hàng

CI

Chức năng

  • Cài gói phụ thuộc của tất cả module
  • Thêm các gói phụ thuộc phục vụ kiểm thử như websocket-client, coverage và pylint

Phù hợp cho

  • Pipeline CI

Có thể tự tạo preset riêng bằng cách khai báo trong file presets.toml, đặt tại ~/.local/share/odoo-venv.

Dùng odoo-venv trong Python

odoo-venv cũng có thể được gọi trực tiếp trong script Python:

from odoo_venv import create_odoo_venv

create_odoo_venv(
    odoo_version="17.0",
    odoo_dir="~/code/odoo/odoo/17.0",
    venv_dir="./.venv",
    python_version="3.10",
    addons_paths=["~/code/oca/web/17.0"],
    install_addons_dirs_requirements=True,
    extra_requirements=["debugpy", "ipython"],
)

Kết luận

Các chiến lược triển khai Odoo thường phức tạp và rời rạc. odoo-venv mang đến một lựa chọn thay thế đơn giản hơn hẳn.

Công cụ này phát huy hiệu quả tốt nhất khi dùng cùng một thành phần hữu ích khác trong bộ công cụ của Trobz: odoo-addons-path .