• logging_strict@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      4 months ago

      wreck can. It’s venv aware. Takes full advantage of hierarchical requirement files. Is intuitive. The learning curve is minimal. Written in Python.

      [[tool.wreck.venvs]]
      venv_base_path = '.venv'
      reqs = [
          'requirements/pip',
          'requirements/pip-tools',
          'requirements/prod',
          'requirements/dev',
          'requirements/manage',
          'requirements/kit',
          'requirements/mypy',
          'requirements/tox',
      ]
      [[tool.wreck.venvs]]
      venv_base_path = '.doc/.venv'
      reqs = [
          'docs/requirements',
          'docs/pip-tools',
      ]
      
      [tool.setuptools.dynamic]
      dependencies = { file = ['requirements/prod.unlock'] }
      optional-dependencies.pip = { file = ['requirements/pip.lock'] }
      optional-dependencies.pip_tools = { file = ['requirements/pip-tools.lock'] }
      optional-dependencies.dev = { file = ['requirements/dev.lock'] }
      optional-dependencies.manage = { file = ['requirements/manage.lock'] }
      optional-dependencies.docs = { file = ['docs/requirements.lock'] }
      

      reqs fix --venv-relpath='.venv'

      reqs fix --venv-relpath='.doc/.venv'

      From *.in requirements files would produce *.unlock and *.lock files for venv .venv. Package versions are sync’ed within all requirements files within that venv.