mirror of
https://github.com/enpaul/tox-poetry-installer.git
synced 2025-09-18 03:13:25 +00:00
Format markdown files with mdformat
This commit is contained in:
425
README.md
425
README.md
@@ -12,61 +12,64 @@ dependencies to be installed using [Poetry](https://python-poetry.org/) from its
|
||||
[](https://www.python.org)
|
||||
[](https://github.com/psf/black)
|
||||
|
||||
See the [Changelog](https://github.com/enpaul/tox-poetry-installer/blob/devel/CHANGELOG.md) for release history.
|
||||
See the
|
||||
[Changelog](https://github.com/enpaul/tox-poetry-installer/blob/devel/CHANGELOG.md) for
|
||||
release history.
|
||||
|
||||
**Documentation**
|
||||
|
||||
* [Introduction](#introduction)
|
||||
* [Install](#install)
|
||||
* [Quick Start](#quick-start)
|
||||
* [Why would I use this?](#why-would-i-use-this) (What problems does this solve?)
|
||||
* [Reference](#reference)
|
||||
* [Configuration Options](#configuration-options)
|
||||
* [Command-line Arguments](#command-line-arguments)
|
||||
* [Errors](#errors)
|
||||
* [Advanced Usage](#advanced-usage)
|
||||
* [Developing](#developing)
|
||||
* [Contributing](#contributing)
|
||||
* [Roadmap](#roadmap)
|
||||
* [Path to Beta](#path-to-beta)
|
||||
* [Path to Stable](#path-to-stable)
|
||||
- [Introduction](#introduction)
|
||||
- [Install](#install)
|
||||
- [Quick Start](#quick-start)
|
||||
- [Why would I use this?](#why-would-i-use-this) (What problems does this solve?)
|
||||
- [Reference](#reference)
|
||||
- [Configuration Options](#configuration-options)
|
||||
- [Command-line Arguments](#command-line-arguments)
|
||||
- [Errors](#errors)
|
||||
- [Advanced Usage](#advanced-usage)
|
||||
- [Developing](#developing)
|
||||
- [Contributing](#contributing)
|
||||
- [Roadmap](#roadmap)
|
||||
- [Path to Beta](#path-to-beta)
|
||||
- [Path to Stable](#path-to-stable)
|
||||
|
||||
Related resources:
|
||||
* [Poetry Python Project Manager](https://python-poetry.org/)
|
||||
* [Tox Automation Project](https://tox.readthedocs.io/en/latest/)
|
||||
* [Other Tox plugins](https://tox.readthedocs.io/en/latest/plugins.html)
|
||||
|
||||
- [Poetry Python Project Manager](https://python-poetry.org/)
|
||||
- [Tox Automation Project](https://tox.readthedocs.io/en/latest/)
|
||||
- [Other Tox plugins](https://tox.readthedocs.io/en/latest/plugins.html)
|
||||
|
||||
Similar projects:
|
||||
* [Poetry Dev-Dependencies Tox Plugin](https://github.com/sinoroc/tox-poetry-dev-dependencies)
|
||||
* [Poetry Tox Plugin](https://github.com/tkukushkin/tox-poetry)
|
||||
|
||||
- [Poetry Dev-Dependencies Tox Plugin](https://github.com/sinoroc/tox-poetry-dev-dependencies)
|
||||
- [Poetry Tox Plugin](https://github.com/tkukushkin/tox-poetry)
|
||||
|
||||
## Introduction
|
||||
|
||||
This is a plugin to unify two great projects in the Python ecosystem: the
|
||||
[Tox](https://tox.readthedocs.io/en/latest/) automation project and the
|
||||
[Poetry](https://python-poetry.org) project/dependency manager. Specifically it allows
|
||||
the repeatable dependency resolution and installation tools that Poetry uses to benefit
|
||||
the isolated environments that Tox uses to run automated tests. The motivation to write
|
||||
this plugin came from a need for a single source of truth for the versions of all
|
||||
packages that should be installed to an environment.
|
||||
[Poetry](https://python-poetry.org) project/dependency manager. Specifically it allows the
|
||||
repeatable dependency resolution and installation tools that Poetry uses to benefit the
|
||||
isolated environments that Tox uses to run automated tests. The motivation to write this
|
||||
plugin came from a need for a single source of truth for the versions of all packages that
|
||||
should be installed to an environment.
|
||||
|
||||
When in use this plugin will allow a Tox environment to install its required
|
||||
dependencies using the versions specified in the Poetry lockfile. This eliminates
|
||||
needing to specify package versions in multiple places as well as ensures that the Tox
|
||||
environment has the exact same versions of a given package as the Poetry environment.
|
||||
This reduces (or hopefully eliminates) hard to debug problems caused by subtle
|
||||
differences in the dependency graph of the active development environment (the one managed
|
||||
by Poetry) and the automated test environment(s) created by Tox.
|
||||
When in use this plugin will allow a Tox environment to install its required dependencies
|
||||
using the versions specified in the Poetry lockfile. This eliminates needing to specify
|
||||
package versions in multiple places as well as ensures that the Tox environment has the
|
||||
exact same versions of a given package as the Poetry environment. This reduces (or
|
||||
hopefully eliminates) hard to debug problems caused by subtle differences in the
|
||||
dependency graph of the active development environment (the one managed by Poetry) and the
|
||||
automated test environment(s) created by Tox.
|
||||
|
||||
To learn more about the problems this plugin aims to solve jump ahead to
|
||||
[What problems does this solve?](#why-would-i-use-this).
|
||||
Otherwise keep reading to get started.
|
||||
[What problems does this solve?](#why-would-i-use-this). Otherwise keep reading to get
|
||||
started.
|
||||
|
||||
### Install
|
||||
|
||||
The recommended way to install the plugin is to add it to a project's `pyproject.toml`
|
||||
and lockfile using Poetry:
|
||||
The recommended way to install the plugin is to add it to a project's `pyproject.toml` and
|
||||
lockfile using Poetry:
|
||||
|
||||
```bash
|
||||
poetry add tox-poetry-installer[poetry] --dev
|
||||
@@ -85,7 +88,7 @@ pip install tox-poetry-installer[poetry] == 0.6.0
|
||||
```
|
||||
|
||||
The plugin can also be installed using the Tox
|
||||
[`requires`]((https://tox.readthedocs.io/en/latest/config.html#conf-requires))
|
||||
[`requires`](<(https://tox.readthedocs.io/en/latest/config.html#conf-requires)>)
|
||||
configuration option. Note however that dependencies installed via the `requires` option
|
||||
are not handled by the plugin and will be installed the same way as a `pip install ...`
|
||||
above. For this reason it is also recommended to always pin to a specific version when
|
||||
@@ -115,9 +118,9 @@ information on this use case.
|
||||
|
||||
### Quick Start
|
||||
|
||||
Before making any changes to `tox.ini` the project is already benefiting from having
|
||||
the plugin installed: all dependencies of the root project package are installed using
|
||||
the Poetry backend to all Tox environments that install the root package without any
|
||||
Before making any changes to `tox.ini` the project is already benefiting from having the
|
||||
plugin installed: all dependencies of the root project package are installed using the
|
||||
Poetry backend to all Tox environments that install the root package without any
|
||||
configuration changes.
|
||||
|
||||
To add dependencies from the lockfile to a Tox environment, add the option
|
||||
@@ -151,8 +154,8 @@ deps =
|
||||
commands = ...
|
||||
```
|
||||
|
||||
Alternatively, to quickly install all Poetry dev-dependencies to a Tox environment, add the
|
||||
[`install_dev_deps`](#install_dev_deps) option to the environment configuration:
|
||||
Alternatively, to quickly install all Poetry dev-dependencies to a Tox environment, add
|
||||
the [`install_dev_deps`](#install_dev_deps) option to the environment configuration:
|
||||
|
||||
```ini
|
||||
[testenv]
|
||||
@@ -160,21 +163,21 @@ description = Some very cool tests
|
||||
install_dev_deps = true
|
||||
```
|
||||
|
||||
See the [Reference](#reference) section for more details on available
|
||||
configuration options and the [Advanced Usage](#advanced-usage) section for some
|
||||
unusual use cases.
|
||||
See the [Reference](#reference) section for more details on available configuration
|
||||
options and the [Advanced Usage](#advanced-usage) section for some unusual use cases.
|
||||
|
||||
### Why would I use this?
|
||||
|
||||
**The Problem**
|
||||
|
||||
By default Tox uses Pip to install the [PEP-508](https://www.python.org/dev/peps/pep-0508/)
|
||||
compliant dependencies to a test environment. This plugin extends the default Tox
|
||||
dependency installation behavior to support installing dependencies using a Poetry-based
|
||||
installation method that makes use of the dependency metadata from Poetry's lockfile.
|
||||
By default Tox uses Pip to install the
|
||||
[PEP-508](https://www.python.org/dev/peps/pep-0508/) compliant dependencies to a test
|
||||
environment. This plugin extends the default Tox dependency installation behavior to
|
||||
support installing dependencies using a Poetry-based installation method that makes use of
|
||||
the dependency metadata from Poetry's lockfile.
|
||||
|
||||
Environment dependencies for a Tox environment are usually specified in PEP-508 format, like
|
||||
the below example:
|
||||
Environment dependencies for a Tox environment are usually specified in PEP-508 format,
|
||||
like the below example:
|
||||
|
||||
```ini
|
||||
[testenv]
|
||||
@@ -185,55 +188,58 @@ deps =
|
||||
baz
|
||||
```
|
||||
|
||||
Let's assume these dependencies are also useful during development, so they can be added to the
|
||||
Poetry environment using this command:
|
||||
Let's assume these dependencies are also useful during development, so they can be added
|
||||
to the Poetry environment using this command:
|
||||
|
||||
```
|
||||
poetry add --dev \
|
||||
foo==1.2.3 \
|
||||
bar>=1.3,<2.0 \
|
||||
baz
|
||||
```
|
||||
```
|
||||
poetry add --dev \
|
||||
foo==1.2.3 \
|
||||
bar>=1.3,<2.0 \
|
||||
baz
|
||||
```
|
||||
|
||||
However there is a potential problem that could arise from each of these environment
|
||||
dependencies that would _only_ appear in the Tox environment and not in the Poetry
|
||||
environment in use by a developer:
|
||||
However there is a potential problem that could arise from each of these environment
|
||||
dependencies that would _only_ appear in the Tox environment and not in the Poetry
|
||||
environment in use by a developer:
|
||||
|
||||
* **The `foo` dependency is pinned to a specific version:** let's imagine a security
|
||||
vulnerability is discovered in `foo` and the maintainers release version `1.2.4` to fix
|
||||
it. A developer can run `poetry remove foo` and then `poetry add foo^1.2` to get the new
|
||||
version, but the Tox environment is left unchanged. The development environment, as defined by
|
||||
the lockfile, is now patched against the vulnerability but the Tox environment is not.
|
||||
- **The `foo` dependency is pinned to a specific version:** let's imagine a security
|
||||
vulnerability is discovered in `foo` and the maintainers release version `1.2.4` to fix
|
||||
it. A developer can run `poetry remove foo` and then `poetry add foo^1.2` to get the new
|
||||
version, but the Tox environment is left unchanged. The development environment, as
|
||||
defined by the lockfile, is now patched against the vulnerability but the Tox environment
|
||||
is not.
|
||||
|
||||
* **The `bar` dependency specifies a dynamic range:** a dynamic range allows a range of
|
||||
- **The `bar` dependency specifies a dynamic range:** a dynamic range allows a range of
|
||||
versions to be installed, but the lockfile will have an exact version specified so that
|
||||
the Poetry environment is reproducible; this allows versions to be updated with
|
||||
`poetry update` rather than with the `remove` and `add` commands used above. If the
|
||||
maintainers of `bar` release version `1.6.0` then the Tox environment will install it
|
||||
because it is valid for the specified version range. Meanwhile the Poetry environment will
|
||||
continue to install the version from the lockfile until `poetry update bar` explicitly
|
||||
updates it. The development environment is now has a different version of `bar` than the Tox
|
||||
environment.
|
||||
updates it. The development environment is now has a different version of `bar` than the
|
||||
Tox environment.
|
||||
|
||||
* **The `baz` dependency is unpinned:** unpinned dependencies are
|
||||
- **The `baz` dependency is unpinned:** unpinned dependencies are
|
||||
[generally a bad idea](https://python-poetry.org/docs/faq/#why-are-unbound-version-constraints-a-bad-idea),
|
||||
but here it can cause real problems. Poetry will interpret an unbound dependency using
|
||||
[the carrot requirement](https://python-poetry.org/docs/dependency-specification/#caret-requirements)
|
||||
but Pip (via Tox) will interpret it as a wildcard. If the latest version of `baz` is `1.0.0`
|
||||
then `poetry add baz` will result in a constraint of `baz>=1.0.0,<2.0.0` while the Tox
|
||||
environment will have a constraint of `baz==*`. The Tox environment can now install an
|
||||
incompatible version of `baz` and any errors that causes cannot be replicated using `poetry update`.
|
||||
but Pip (via Tox) will interpret it as a wildcard. If the latest version of `baz` is
|
||||
`1.0.0` then `poetry add baz` will result in a constraint of `baz>=1.0.0,<2.0.0` while the
|
||||
Tox environment will have a constraint of `baz==*`. The Tox environment can now install an
|
||||
incompatible version of `baz` and any errors that causes cannot be replicated using
|
||||
`poetry update`.
|
||||
|
||||
All of these problems can apply not only to the dependencies specified for a Tox environment,
|
||||
but also to the dependencies of those dependencies, those dependencies' dependencies, and so on.
|
||||
All of these problems can apply not only to the dependencies specified for a Tox
|
||||
environment, but also to the dependencies of those dependencies, those dependencies'
|
||||
dependencies, and so on.
|
||||
|
||||
**The Solution**
|
||||
|
||||
This plugin allows dependencies specified in Tox environment take their version directly from
|
||||
the Poetry lockfile without needing an independent version to be specified in the Tox
|
||||
environment configuration. The modified version of the example environment given below appears
|
||||
less stable than the one presented above because it does not specify any versions for its
|
||||
dependencies:
|
||||
This plugin allows dependencies specified in Tox environment take their version directly
|
||||
from the Poetry lockfile without needing an independent version to be specified in the Tox
|
||||
environment configuration. The modified version of the example environment given below
|
||||
appears less stable than the one presented above because it does not specify any versions
|
||||
for its dependencies:
|
||||
|
||||
```ini
|
||||
[testenv]
|
||||
@@ -246,11 +252,10 @@ locked_deps =
|
||||
```
|
||||
|
||||
However with the `tox-poetry-installer` plugin installed Tox will install these
|
||||
dependencies from the Poetry lockfile so that the version installed to the Tox
|
||||
environment exactly matches the version Poetry is managing. When `poetry update` updates
|
||||
the lockfile with new versions of these dependencies, Tox will automatically install
|
||||
these new versions without needing any changes to the configuration.
|
||||
|
||||
dependencies from the Poetry lockfile so that the version installed to the Tox environment
|
||||
exactly matches the version Poetry is managing. When `poetry update` updates the lockfile
|
||||
with new versions of these dependencies, Tox will automatically install these new versions
|
||||
without needing any changes to the configuration.
|
||||
|
||||
## Reference
|
||||
|
||||
@@ -260,14 +265,14 @@ All options listed below are Tox environment options and can be applied to one o
|
||||
environment sections of the `tox.ini` file. They cannot be applied to the global Tox
|
||||
configuration section.
|
||||
|
||||
**NOTE:** Environment settings applied to the main `testenv` environment will be
|
||||
inherited by child environments (i.e. `testenv:foo`) unless they are explicitly
|
||||
overridden by the child environment's configuration.
|
||||
**NOTE:** Environment settings applied to the main `testenv` environment will be inherited
|
||||
by child environments (i.e. `testenv:foo`) unless they are explicitly overridden by the
|
||||
child environment's configuration.
|
||||
|
||||
#### `locked_deps`
|
||||
|
||||
* **Type:** multi-line list
|
||||
* **Default:** `[]`
|
||||
- **Type:** multi-line list
|
||||
- **Default:** `[]`
|
||||
|
||||
Names of packages in the Poetry lockfile to install to the Tox environment. All
|
||||
dependencies specified here will be installed to the Tox environment using the details
|
||||
@@ -275,24 +280,23 @@ given by the Poetry lockfile.
|
||||
|
||||
#### `require_locked_deps`
|
||||
|
||||
- **Type:** boolean
|
||||
- **Default:** `false`
|
||||
|
||||
* **Type:** boolean
|
||||
* **Default:** `false`
|
||||
|
||||
Whether the environment should allow unlocked dependencies (dependencies not in the
|
||||
Poetry lockfile) to be installed alongside locked dependencies. If `true` then an error
|
||||
will be raised if the environment specifies unlocked dependencies to install and the
|
||||
plugin will block any other plugins from using the
|
||||
Whether the environment should allow unlocked dependencies (dependencies not in the Poetry
|
||||
lockfile) to be installed alongside locked dependencies. If `true` then an error will be
|
||||
raised if the environment specifies unlocked dependencies to install and the plugin will
|
||||
block any other plugins from using the
|
||||
[`tox_testenv_install_deps`](https://tox.readthedocs.io/en/latest/plugins.html#tox.hookspecs.tox_testenv_install_deps)
|
||||
hook.
|
||||
|
||||
#### `install_dev_deps`
|
||||
|
||||
* **Type:** boolean
|
||||
* **Default:** `false`
|
||||
- **Type:** boolean
|
||||
- **Default:** `false`
|
||||
|
||||
Whether all Poetry dev-dependencies should be installed to the environment. If `true`
|
||||
then all dependencies specified in the
|
||||
Whether all Poetry dev-dependencies should be installed to the environment. If `true` then
|
||||
all dependencies specified in the
|
||||
[`dev-dependencies`](https://python-poetry.org/docs/pyproject/#dependencies-and-dev-dependencies)
|
||||
section of `pyproject.toml` will be installed automatically.
|
||||
|
||||
@@ -307,82 +311,79 @@ Indicates that Poetry is expected to be available to Tox and, if it is not, then
|
||||
run should fail. If provided and the `poetry` package is not installed to the same
|
||||
environment as the `tox` package then Tox will fail.
|
||||
|
||||
**NOTE:** See [Advanced Usage](#installing-alongside-an-existing-poetry-installation)
|
||||
for more information.
|
||||
**NOTE:** See [Advanced Usage](#installing-alongside-an-existing-poetry-installation) for
|
||||
more information.
|
||||
|
||||
### Errors
|
||||
|
||||
If the plugin encounters an error while processing a Tox environment then it will mark
|
||||
the environment as failed and set the environment status to one of the values below:
|
||||
If the plugin encounters an error while processing a Tox environment then it will mark the
|
||||
environment as failed and set the environment status to one of the values below:
|
||||
|
||||
**NOTE:** In addition to the reasons noted below, the plugin can encounter errors if the
|
||||
Poetry lockfile is not up-to-date with `pyproject.toml`. To resynchronize the
|
||||
lockfile with the `pyproject.toml` run one of
|
||||
Poetry lockfile is not up-to-date with `pyproject.toml`. To resynchronize the lockfile
|
||||
with the `pyproject.toml` run one of
|
||||
[`poetry update`](https://python-poetry.org/docs/cli/#update) or
|
||||
[`poetry lock`](https://python-poetry.org/docs/cli/#lock)
|
||||
|
||||
#### Poetry Not Installed Error
|
||||
|
||||
* **Status value:** `PoetryNotInstalledError`
|
||||
* **Cause:** Indicates that the `poetry` module could not be imported from the same
|
||||
- **Status value:** `PoetryNotInstalledError`
|
||||
- **Cause:** Indicates that the `poetry` module could not be imported from the same
|
||||
environment as the running `tox` module and the runtime flags specified
|
||||
[`--require-poetry`](#--require-poetry).
|
||||
* **Resolution options:**
|
||||
* Install Poetry: ensure that `poetry` is installed to the same environment as `tox`.
|
||||
* Skip running the plugin: remove the `--require-poetry` flag from the runtime options.
|
||||
- **Resolution options:**
|
||||
- Install Poetry: ensure that `poetry` is installed to the same environment as `tox`.
|
||||
- Skip running the plugin: remove the `--require-poetry` flag from the runtime options.
|
||||
|
||||
**NOTE:** See [Advanced Usage](#installing-alongside-an-existing-poetry-installation)
|
||||
for more information.
|
||||
**NOTE:** See [Advanced Usage](#installing-alongside-an-existing-poetry-installation) for
|
||||
more information.
|
||||
|
||||
#### Locked Dependency Version Conflict Error
|
||||
|
||||
* **Status value:** `LockedDepVersionConflictError`
|
||||
* **Cause:** Indicates that a dependency specified in the [`locked_deps`](#locked_deps)
|
||||
- **Status value:** `LockedDepVersionConflictError`
|
||||
- **Cause:** Indicates that a dependency specified in the [`locked_deps`](#locked_deps)
|
||||
configuration option in `tox.ini` includes a
|
||||
[PEP-508 version specifier](https://www.python.org/dev/peps/pep-0508/#grammar)
|
||||
(i.e. `pytest >=6.0, <6.1`).
|
||||
* **Resolution options:**
|
||||
* Use the dependency version from the lockfile: remove any/all version specifiers
|
||||
from the item in the `locked_deps` list in `tox.ini`.
|
||||
* Do not install the dependency: remove the item from the `locked_deps` list in
|
||||
`tox.ini`.
|
||||
[PEP-508 version specifier](https://www.python.org/dev/peps/pep-0508/#grammar) (i.e.
|
||||
`pytest >=6.0, <6.1`).
|
||||
- **Resolution options:**
|
||||
- Use the dependency version from the lockfile: remove any/all version specifiers from the
|
||||
item in the `locked_deps` list in `tox.ini`.
|
||||
- Do not install the dependency: remove the item from the `locked_deps` list in `tox.ini`.
|
||||
|
||||
#### Locked Dependency Not Found Error
|
||||
|
||||
* **Status value:** `LockedDepNotFoundError`
|
||||
* **Cause:** Indicates that a dependency specified in the [`locked_deps`](#locked_deps)
|
||||
- **Status value:** `LockedDepNotFoundError`
|
||||
- **Cause:** Indicates that a dependency specified in the [`locked_deps`](#locked_deps)
|
||||
configuration option in `tox.ini` could not be found in the Poetry lockfile.
|
||||
* **Resolution options:**
|
||||
* Add the dependency to the lockfile: run
|
||||
- **Resolution options:**
|
||||
- Add the dependency to the lockfile: run
|
||||
[`poetry add <dependency>`](https://python-poetry.org/docs/cli/#add).
|
||||
* Do not install the dependency: remove the item from the `locked_deps` list in
|
||||
`tox.ini`.
|
||||
- Do not install the dependency: remove the item from the `locked_deps` list in `tox.ini`.
|
||||
|
||||
#### Extra Not Found Error
|
||||
|
||||
* **Status value:** `ExtraNotFoundError`
|
||||
* **Cause:** Indicates that the [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras)
|
||||
configuration option specified a setuptools extra that is not configured by Poetry in
|
||||
`pyproject.toml`
|
||||
* **Resolution options:**
|
||||
* Configure the extra: add a section for the named extra to the
|
||||
[`extras`](https://python-poetry.org/docs/pyproject/#extras) section of
|
||||
`pyproject.toml` and optionally assign dependencies to the named extra using the
|
||||
- **Status value:** `ExtraNotFoundError`
|
||||
- **Cause:** Indicates that the
|
||||
[`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras) configuration
|
||||
option specified a setuptools extra that is not configured by Poetry in `pyproject.toml`
|
||||
- **Resolution options:**
|
||||
- Configure the extra: add a section for the named extra to the
|
||||
[`extras`](https://python-poetry.org/docs/pyproject/#extras) section of `pyproject.toml`
|
||||
and optionally assign dependencies to the named extra using the
|
||||
[`--optional`](https://python-poetry.org/docs/cli/#options_3) dependency setting.
|
||||
* Remove the extra: remove the item from the `extras` list in `tox.ini`.
|
||||
- Remove the extra: remove the item from the `extras` list in `tox.ini`.
|
||||
|
||||
#### Locked Dependencies Required Error
|
||||
|
||||
* **Status value:** `LockedDepsRequiredError`
|
||||
* **Cause:** Indicates that an environment with the [`require_locked_deps`](#require_locked_deps)
|
||||
configuration option also specified unlocked dependencies using
|
||||
[`deps`](https://tox.readthedocs.io/en/latest/config.html#conf-deps) option in
|
||||
`tox.ini`.
|
||||
* **Resolution options:**
|
||||
* Remove all unlocked dependencies: remove the `deps` configuration option in
|
||||
`tox.ini`.
|
||||
* Allow unlocked dependencies: remove the `require_locked_deps` configuration option
|
||||
in `tox.ini` or explicitly set `require_locked_deps = false`.
|
||||
- **Status value:** `LockedDepsRequiredError`
|
||||
- **Cause:** Indicates that an environment with the
|
||||
[`require_locked_deps`](#require_locked_deps) configuration option also specified unlocked
|
||||
dependencies using [`deps`](https://tox.readthedocs.io/en/latest/config.html#conf-deps)
|
||||
option in `tox.ini`.
|
||||
- **Resolution options:**
|
||||
- Remove all unlocked dependencies: remove the `deps` configuration option in `tox.ini`.
|
||||
- Allow unlocked dependencies: remove the `require_locked_deps` configuration option in
|
||||
`tox.ini` or explicitly set `require_locked_deps = false`.
|
||||
|
||||
### Advanced Usage
|
||||
|
||||
@@ -393,16 +394,16 @@ installed by this plugin the Poetry lockfile. Note that these settings will stil
|
||||
applied by the default Tox installation backend when installing unlocked dependencies
|
||||
using the built-in `deps` option.
|
||||
|
||||
* [`install_command`](https://tox.readthedocs.io/en/latest/config.html#conf-install_command)
|
||||
* [`pip_pre`](https://tox.readthedocs.io/en/latest/config.html#conf-pip_pre)
|
||||
* [`download`](https://tox.readthedocs.io/en/latest/config.html#conf-download)
|
||||
* [`indexserver`](https://tox.readthedocs.io/en/latest/config.html#conf-indexserver)
|
||||
* [`usedevelop`](https://tox.readthedocs.io/en/latest/config.html#conf-indexserver)
|
||||
- [`install_command`](https://tox.readthedocs.io/en/latest/config.html#conf-install_command)
|
||||
- [`pip_pre`](https://tox.readthedocs.io/en/latest/config.html#conf-pip_pre)
|
||||
- [`download`](https://tox.readthedocs.io/en/latest/config.html#conf-download)
|
||||
- [`indexserver`](https://tox.readthedocs.io/en/latest/config.html#conf-indexserver)
|
||||
- [`usedevelop`](https://tox.readthedocs.io/en/latest/config.html#conf-indexserver)
|
||||
|
||||
All of these options are obsoleted by using the Poetry backend. If a given package
|
||||
installs successfully using Poetry (using either `poetry add <package>` or
|
||||
`poetry install`) then the required configuration options are already properly set in
|
||||
the Poetry configuration and the plugin will automatically use the same settings when
|
||||
`poetry install`) then the required configuration options are already properly set in the
|
||||
Poetry configuration and the plugin will automatically use the same settings when
|
||||
installing the package.
|
||||
|
||||
#### Reinstalling locked dependencies to a Tox environment
|
||||
@@ -423,23 +424,23 @@ excluded by Poetry itself. As a result these packages cannot be installed by thi
|
||||
either as environment dependencies (passed directly to [`locked_deps`](#locked_deps)) or
|
||||
as transient dependencies (a dependency of a locked dependency).
|
||||
|
||||
As of [Poetry-1.1.4](https://github.com/python-poetry/poetry/releases/tag/1.1.4) there
|
||||
are four packages classified as "unsafe" by Poetry and excluded from the lockfile:
|
||||
As of [Poetry-1.1.4](https://github.com/python-poetry/poetry/releases/tag/1.1.4) there are
|
||||
four packages classified as "unsafe" by Poetry and excluded from the lockfile:
|
||||
|
||||
* `setuptools`
|
||||
* `distribute`
|
||||
* `pip`
|
||||
* `wheel`
|
||||
- `setuptools`
|
||||
- `distribute`
|
||||
- `pip`
|
||||
- `wheel`
|
||||
|
||||
When one of these packages is encountered by the plugin a warning will be logged and
|
||||
_**the package will not be installed to the environment**_. If the unsafe package
|
||||
is required for the environment then it will need to be specified as an unlocked
|
||||
dependency using the [`deps`](https://tox.readthedocs.io/en/latest/config.html#conf-deps)
|
||||
_**the package will not be installed to the environment**_. If the unsafe package is
|
||||
required for the environment then it will need to be specified as an unlocked dependency
|
||||
using the [`deps`](https://tox.readthedocs.io/en/latest/config.html#conf-deps)
|
||||
configuration option in `tox.ini`, ideally with an exact pinned version.
|
||||
|
||||
* The set of packages excluded from the Poetry lockfile can be found in
|
||||
- The set of packages excluded from the Poetry lockfile can be found in
|
||||
[`poetry.puzzle.provider.Provider.UNSAFE_DEPENDENCIES`](https://github.com/python-poetry/poetry/blob/master/poetry/puzzle/provider.py)
|
||||
* There is an ongoing discussion of Poetry's handling of these packages at
|
||||
- There is an ongoing discussion of Poetry's handling of these packages at
|
||||
[python-poetry/poetry#1584](https://github.com/python-poetry/poetry/issues/1584)
|
||||
|
||||
#### Installing alongside an existing Poetry installation
|
||||
@@ -447,8 +448,8 @@ configuration option in `tox.ini`, ideally with an exact pinned version.
|
||||
The plugin specifies the `poetry` package as an optional dependency to support an
|
||||
externally managed Poetry installation such as in a container or CI environment. This
|
||||
gives greater flexibility when using Poetry arguments like `--no-root`, `--no-dev`, or
|
||||
`--remove-untracked` which can cause Poetry to uninstall itself if Poetry is specified
|
||||
as a dependency of one of the packages it is managing (like this plugin).
|
||||
`--remove-untracked` which can cause Poetry to uninstall itself if Poetry is specified as
|
||||
a dependency of one of the packages it is managing (like this plugin).
|
||||
|
||||
To have the plugin use the externally-managed Poetry package simply do not install the
|
||||
`poetry` extra when installing this plugin:
|
||||
@@ -461,9 +462,9 @@ poetry add tox-poetry-installer[poetry]
|
||||
poetry add tox-poetry-installer
|
||||
```
|
||||
|
||||
Note that Poetry is an optional dependency to support this use case _only_: Poetry must
|
||||
be installed to the same environment as Tox for the plugin to function. To check that
|
||||
the local environment has all of the required modules in scope run the below command:
|
||||
Note that Poetry is an optional dependency to support this use case _only_: Poetry must be
|
||||
installed to the same environment as Tox for the plugin to function. To check that the
|
||||
local environment has all of the required modules in scope run the below command:
|
||||
|
||||
```bash
|
||||
python -c '\
|
||||
@@ -473,16 +474,16 @@ python -c '\
|
||||
'
|
||||
```
|
||||
|
||||
**NOTE:** To force Tox to fail if Poetry is not installed, run the `tox` command with
|
||||
the [`--require-poetry`](#--require-poetry) option.
|
||||
|
||||
**NOTE:** To force Tox to fail if Poetry is not installed, run the `tox` command with the
|
||||
[`--require-poetry`](#--require-poetry) option.
|
||||
|
||||
## Developing
|
||||
|
||||
Local development requirements:
|
||||
* Python version 3.6+ ([install](https://www.python.org/downloads/))
|
||||
* Poetry version 1.0+ ([install](https://python-poetry.org/docs/#installation))
|
||||
* GNU Make (optional, required to use the makefile)
|
||||
|
||||
- Python version 3.6+ ([install](https://www.python.org/downloads/))
|
||||
- Poetry version 1.0+ ([install](https://python-poetry.org/docs/#installation))
|
||||
- GNU Make (optional, required to use the makefile)
|
||||
|
||||
Local environment setup instructions:
|
||||
|
||||
@@ -511,55 +512,53 @@ when developing the project. Alternatively, many `git` commands will need to be
|
||||
outside of the environment shell by prefacing the command with
|
||||
[`poetry run`](https://python-poetry.org/docs/cli/#run).
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
All project contributors and participants are expected to adhere to the
|
||||
[Contributor Covenant Code of Conduct, v2](CODE_OF_CONDUCT.md)
|
||||
([external link](https://www.contributor-covenant.org/version/2/0/code_of_conduct/)).
|
||||
[Contributor Covenant Code of Conduct, v2](CODE_OF_CONDUCT.md) ([external link](https://www.contributor-covenant.org/version/2/0/code_of_conduct/)).
|
||||
|
||||
The `devel` branch has the latest (potentially unstable) changes. The
|
||||
[tagged versions](https://github.com/enpaul/tox-poetry-installer/releases) correspond to the
|
||||
releases on PyPI.
|
||||
[tagged versions](https://github.com/enpaul/tox-poetry-installer/releases) correspond to
|
||||
the releases on PyPI.
|
||||
|
||||
* To report a bug, request a feature, or ask for assistance, please
|
||||
- To report a bug, request a feature, or ask for assistance, please
|
||||
[open an issue on the Github repository](https://github.com/enpaul/tox-poetry-installer/issues/new).
|
||||
* To report a security concern or code of conduct violation, please contact the project author
|
||||
directly at **me [at] enp dot one**.
|
||||
* To submit an update, please
|
||||
- To report a security concern or code of conduct violation, please contact the project
|
||||
author directly at **me \[at\] enp dot one**.
|
||||
- To submit an update, please
|
||||
[fork the repository](https://docs.github.com/en/enterprise/2.20/user/github/getting-started-with-github/fork-a-repo)
|
||||
and
|
||||
[open a pull request](https://github.com/enpaul/tox-poetry-installer/compare).
|
||||
|
||||
and [open a pull request](https://github.com/enpaul/tox-poetry-installer/compare).
|
||||
|
||||
## Roadmap
|
||||
|
||||
This project is under active development and is classified as beta software, ready for
|
||||
production environments on a provisional basis only.
|
||||
|
||||
* Beta classification was assigned with [v0.6.0](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.0)
|
||||
* Stable classification will be assigned when the test suite covers an acceptable number of
|
||||
- Beta classification was assigned with
|
||||
[v0.6.0](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.0)
|
||||
- Stable classification will be assigned when the test suite covers an acceptable number of
|
||||
use cases
|
||||
|
||||
### Path to Beta
|
||||
|
||||
- [X] Verify that primary package dependencies (from the `.package` env) are installed
|
||||
correctly using the Poetry backend.
|
||||
- [X] Support the [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras)
|
||||
Tox configuration option ([#4](https://github.com/enpaul/tox-poetry-installer/issues/4))
|
||||
- [X] Add per-environment Tox configuration option to fall back to default installation
|
||||
backend.
|
||||
- [x] Verify that primary package dependencies (from the `.package` env) are installed
|
||||
correctly using the Poetry backend.
|
||||
- [x] Support the [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras) Tox
|
||||
configuration option ([#4](https://github.com/enpaul/tox-poetry-installer/issues/4))
|
||||
- [x] Add per-environment Tox configuration option to fall back to default installation
|
||||
backend.
|
||||
- [ ] ~Add warnings when an unsupported Tox configuration option is detected while using the
|
||||
Poetry backend.~ ([#5](https://github.com/enpaul/tox-poetry-installer/issues/5))
|
||||
- [X] Add trivial tests to ensure the project metadata is consistent between the pyproject.toml
|
||||
and the module constants.
|
||||
- [X] Update to use [poetry-core](https://github.com/python-poetry/poetry-core) and
|
||||
improve robustness of the Tox and Poetry module imports
|
||||
to avoid potentially breaking API changes in upstream packages. ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||
- [ ] ~Find and implement a way to mitigate the [UNSAFE_DEPENDENCIES issue](https://github.com/python-poetry/poetry/issues/1584) in Poetry.~
|
||||
([#6](https://github.com/enpaul/tox-poetry-installer/issues/6))
|
||||
- [X] Fix logging to make proper use of Tox's logging reporter infrastructure ([#3](https://github.com/enpaul/tox-poetry-installer/issues/3))
|
||||
- [X] Add configuration option for installing all dev-dependencies to a testenv ([#14](https://github.com/enpaul/tox-poetry-installer/issues/14))
|
||||
Poetry backend.~ ([#5](https://github.com/enpaul/tox-poetry-installer/issues/5))
|
||||
- [x] Add trivial tests to ensure the project metadata is consistent between the pyproject.toml
|
||||
and the module constants.
|
||||
- [x] Update to use [poetry-core](https://github.com/python-poetry/poetry-core) and improve
|
||||
robustness of the Tox and Poetry module imports to avoid potentially breaking API changes
|
||||
in upstream packages. ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||
- [ ] ~Find and implement a way to mitigate the
|
||||
[UNSAFE_DEPENDENCIES issue](https://github.com/python-poetry/poetry/issues/1584) in
|
||||
Poetry.~ ([#6](https://github.com/enpaul/tox-poetry-installer/issues/6))
|
||||
- [x] Fix logging to make proper use of Tox's logging reporter infrastructure ([#3](https://github.com/enpaul/tox-poetry-installer/issues/3))
|
||||
- [x] Add configuration option for installing all dev-dependencies to a testenv ([#14](https://github.com/enpaul/tox-poetry-installer/issues/14))
|
||||
|
||||
### Path to Stable
|
||||
|
||||
@@ -567,8 +566,6 @@ Everything in Beta plus...
|
||||
|
||||
- [ ] Fully replace dependency on `poetry` with dependency on `poetry-core` ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||
- [ ] Add comprehensive unit tests
|
||||
- [ ] Add tests for each feature version of Tox between 3.0 and 3.20
|
||||
- [X] Add tests for Python-3.6, 3.7, 3.8, and 3.9
|
||||
- [X] Add Github Actions based CI
|
||||
- [ ] Add CI for CPython, PyPy, and Conda
|
||||
- [ ] Add CI for Linux and Windows
|
||||
- [ ] Add tests for each feature version of Tox between 3.8 and 3.20
|
||||
- [x] Add tests for Python-3.6, 3.7, 3.8, and 3.9
|
||||
- [x] Add Github Actions based CI
|
||||
|
Reference in New Issue
Block a user