Git Product home page Git Product logo

flitenv's Introduction

flitenv

Manage venvs and dependencies for flit projects.

Features:

  • Supports the most modern metadata format described in PEP 621.
  • Locks dependencies using pip-tools.
  • Multiple venvs per project to ensure a better isolation of environments.
  • No vendor lock, under-the-hood uses popular and well-maintained technologies and tool-agnostic formats.
  • Cross-platform.
  • Battle-tested.

Installation

python3 -m pip install flitenv

Usage

Basics:

  1. The project stores metadata in a flit-compatible format, as described in the flit documentation. The recommended ways is to us the new [project] section introduced in PEP 621.
  2. Direct required production dependencies of the project are described in dependencies list. This environment is called main.
  3. Development environments are described in the [project.optional-dependencies] section. Good examples of such environments are test, lint, and doc.
  4. For each environment, flitenv will create a separate venv in .venvs to ensure a good isolation.
  5. "Lock file" is a file with exact versions of all dependencies of the project in the given environment, including the transitive ones.
  6. Flitenv uses requirements.txt files generated by pip-tools as lock files.
  7. It is recommend to generate a lock file for (and only for) the main environment.
  8. flitenv follows the flit philosophy. It provides only the most helpful and flexible commands, and you can do anything you ever need by combining them with each other and with other tools.

Below are usage examples. Each example uses lint as the target environment and flake8 as a command we want to run in this environment.

  • flitenv install lint: install dependencies. If the venv doesn't exist, it will be created. Can also be used to upgrade dependencies when the lock file has been changed.
  • flitenv run lint flake8: run a command. If the venv doesn't exist, it will be created, and the dependencies will be installed.
  • flitenv lock lint: generate lock file (requirements-lint.txt) for the env.
  • flitenv lock main: generate lock file (requirements.txt) for the main env. If there is no env-specific lock file, this one will be used instead.
  • flitenv lock main -c ../other-project/requirements.txt: generate lock file using lock file from another project as a reference. It allows to ensure compatibility of lock files accross multiple projects.
  • rm requirements.txt && flitenv lock main: upgrade all dependencies in the lock file.
  • rm -rf .venvs/lint && flitenv install lint: re-create the venv. It is useful to ensure that all old dependencies are removed.
  • flit build: build a distribution for the project.
  • flit install --symlink --python $(which python3.9) --deps=none: symlink the project into the given Python interpreter without installing dependencies. It is helpful if you want to have nice go-to-definition in vscode across multiple projects.

flitenv's People

Contributors

orsinium avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.