Giter Site home page Giter Site logo

ajkerrigan / example-python Goto Github PK

View Code? Open in Web Editor NEW

This project forked from polkapolka/example-python

0.0 1.0 0.0 1.69 MB

An example repo to demonstrate Python support in Pants v2

License: Apache License 2.0

Shell 69.78% Python 18.35% Starlark 11.86%

example-python's Introduction

example-python

An example repository to demonstrate Python support in Pants.

See pantsbuild.org for much more detailed documentation.

This is only one possible way of laying out your project with Pants. See pantsbuild.org/docs/source-roots#examples for some other example layouts.

Running Pants

You run Pants goals using the ./pants wrapper script, which will bootstrap the configured version of Pants if necessary.

โ“ Running with Apple Silicon and/or MacOS? You will want to make changes to the search_path and interpreter_constraints values in pants.toml before running ./pants - there is guidance in pants.toml for those settings.

Use ./pants --version to see the version of Pants configured for the repo (which you can also find in pants.toml).

Goals

Pants commands are called goals. You can get a list of goals with

./pants help goals

Targets

Targets are a way of setting metadata for some part of your code, such as timeouts for tests and entry points for binaries. Targets have types like python_source, resources, and pex_binary. They are defined in BUILD files.

Pants goals can be invoked on targets or directly on source files (which is often more intuitive and convenient). In the latter case, Pants locates target metadata for the source files as needed.

File specifications

Invoking goals on files is straightforward, e.g.,

./pants test helloworld/greet/greeting_test.py

You can use globs:

./pants lint helloworld/greet/*.py

But note that these will be expanded by your shell, so this is equivalent to having used

./pants lint helloworld/greet/__init__.py helloworld/greet/greeting.py helloworld/greet/greeting_test.py

If you want Pants itself to expand the globs (which is sometimes necessary), you must quote them in the shell:

./pants lint 'helloworld/greet/*.py'

You can run on all changed files:

./pants --changed-since=HEAD lint

You can run on all changed files, and any of their "dependees":

./pants --changed-since=HEAD --changed-dependees=transitive test

Target specifications

Targets are referenced on the command line using their address, of the form path/to/dir:name, e.g.,

./pants lint helloworld/greet:lib

You can glob over all targets in a directory with a single trailing :, or over all targets in a directory and all its subdirectories with a double trailing ::, e.g.,

./pants lint helloworld::

Globbing semantics

When you glob over files or targets, Pants knows to ignore ones that aren't relevant to the requested goal. For example, if you run the test goal over a set of files that includes non-test files, Pants will just ignore those, rather than error. So you can safely do things like

./pants test ::

To run all tests.

Example Goals

Try these out in this repo!

List targets

./pants list ::  # All targets.
./pants list 'helloworld/**/*.py'  # Just targets containing Python code.

Run linters and formatters

./pants lint ::
./pants fmt helloworld/greet::

Run MyPy

./pants check ::

Run tests

./pants test ::  # Run all tests in the repo.
./pants test --output=all ::  # Run all tests in the repo and view pytest output even for tests that passed (you can set this permanently in pants.toml).
./pants test helloworld/translator:tests  # Run all the tests in this target.
./pants test helloworld/translator/translator_test.py  # Run just the tests in this file.
./pants test helloworld/translator/translator_test.py -- -k test_unknown_phrase  # Run just this one test by passing through pytest args.

Create a PEX binary

./pants package helloworld/main.py

Run a binary directly

./pants run helloworld/main.py

Open a REPL

./pants repl helloworld/greet:lib  # The REPL will have all relevant code and dependencies on its sys.path.
./pants repl --shell=ipython helloworld/greet:lib --no-pantsd  # To use IPython, you must disable Pantsd for now.

Build a wheel / generate setup.py

This will build both a .whl bdist and a .tar.gz sdist.

./pants package helloworld/translator:dist

Count lines of code

./pants count-loc '**/*'

Create virtualenv for IDE integration

./pants export ::

example-python's People

Contributors

asherf avatar benjyw avatar danieljanes avatar eric-arellano avatar jimmcslim avatar jsirois avatar kludex avatar stuhood avatar tdyas avatar

Watchers

 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.