Switch from tox to nox

This commit is contained in:
messense 2022-01-17 00:12:40 +08:00
parent 2449df5732
commit ce80b7e0f3
32 changed files with 91 additions and 93 deletions

View File

@ -206,11 +206,10 @@ jobs:
- name: Test python examples and tests - name: Test python examples and tests
shell: bash shell: bash
run: | run: |
python -m pip install -U pip tox python -m pip install -U pip nox
cargo xtask test-py cargo xtask test-py
env: env:
CARGO_TARGET_DIR: ${{ github.workspace }} CARGO_TARGET_DIR: ${{ github.workspace }}
TOX_TESTENV_PASSENV: "CARGO_BUILD_TARGET CARGO_TARGET_DIR"
- name: Test cross compilation - name: Test cross compilation
if: ${{ matrix.platform.os == 'ubuntu-latest' && matrix.python-version == '3.9' }} if: ${{ matrix.platform.os == 'ubuntu-latest' && matrix.python-version == '3.9' }}

View File

@ -10,7 +10,7 @@ repository = "https://github.com/pyo3/pyo3"
documentation = "https://docs.rs/crate/pyo3/" documentation = "https://docs.rs/crate/pyo3/"
categories = ["api-bindings", "development-tools::ffi"] categories = ["api-bindings", "development-tools::ffi"]
license = "Apache-2.0" license = "Apache-2.0"
exclude = ["/.gitignore", ".cargo/config", "/codecov.yml", "/Makefile", "/pyproject.toml", "/tox.ini"] exclude = ["/.gitignore", ".cargo/config", "/codecov.yml", "/Makefile", "/pyproject.toml", "/noxfile.py"]
edition = "2018" edition = "2018"
links = "python" links = "python"

View File

@ -13,8 +13,8 @@ test: lint test_py
cargo test --features="abi3 $(ALL_ADDITIVE_FEATURES)" cargo test --features="abi3 $(ALL_ADDITIVE_FEATURES)"
test_py: test_py:
@for example in examples/*/tox.ini; do echo "-- Running tox for $$example --"; tox -e py -c $$example || exit 1; echo ""; done @for example in examples/*/noxfile.py; do echo "-- Running nox for $$example --"; nox -f $$example/noxfile.py || exit 1; echo ""; done
@for package in pytests/*/tox.ini; do echo "-- Running tox for $$package --"; tox -e py -c $$package || exit 1; echo ""; done @for package in pytests/*/noxfile.py; do echo "-- Running nox for $$package --"; nox -f $$package/noxfile.py || exit 1; echo ""; done
fmt_py: fmt_py:
black . --check black . --check
@ -35,7 +35,6 @@ coverage:
bash -c "\ bash -c "\
set -a\ set -a\
source <(cargo llvm-cov show-env)\ source <(cargo llvm-cov show-env)\
export TOX_TESTENV_PASSENV=*\
make test_py\ make test_py\
" "
cargo llvm-cov $(COVERAGE_PACKAGES) --no-run --summary-only cargo llvm-cov $(COVERAGE_PACKAGES) --no-run --summary-only

View File

@ -1,6 +1,6 @@
# PyO3 Examples # PyO3 Examples
These example crates are a collection of toy extension modules built with PyO3. They are all tested using `tox` in PyO3's CI. These example crates are a collection of toy extension modules built with PyO3. They are all tested using `nox` in PyO3's CI.
Below is a brief description of each of these: Below is a brief description of each of these:

View File

@ -18,10 +18,10 @@ maturin develop
pytest pytest
``` ```
Alternatively, install tox and run the tests inside an isolated environment: Alternatively, install nox and run the tests inside an isolated environment:
```shell ```shell
tox -e py nox
``` ```
## Copying this example ## Copying this example

View File

@ -1,5 +1,5 @@
[template] [template]
ignore = [".tox"] ignore = [".tox", ".nox"]
[hooks] [hooks]
pre = [".template/pre-script.rhai"] pre = [".template/pre-script.rhai"]

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install(".")
session.run("pytest")

View File

@ -1,10 +0,0 @@
[tox]
# can't install from sdist because local pyo3 repo can't be included in the sdist
skipsdist = true
[testenv]
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands =
python -m pip install .
pytest {posargs}

View File

@ -17,10 +17,10 @@ pip install -r requirements-dev.txt
maturin develop && pytest maturin develop && pytest
``` ```
Alternatively, install tox and run the tests inside an isolated environment: Alternatively, install nox and run the tests inside an isolated environment:
```shell ```shell
tox -e py nox
``` ```
## Copying this example ## Copying this example

View File

@ -1,5 +1,5 @@
[template] [template]
ignore = [".tox"] ignore = [".tox", ".nox"]
[hooks] [hooks]
pre = [".template/pre-script.rhai"] pre = [".template/pre-script.rhai"]

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install(".")
session.run("pytest")

View File

@ -1,10 +0,0 @@
[tox]
# can't install from sdist because local pyo3 repo can't be included in the sdist
skipsdist = true
[testenv]
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands =
python -m pip install .
pytest {posargs}

View File

@ -17,10 +17,10 @@ pip install -r requirements-dev.txt
python setup.py develop && pytest python setup.py develop && pytest
``` ```
Alternatively, install tox and run the tests inside an isolated environment: Alternatively, install nox and run the tests inside an isolated environment:
```shell ```shell
tox -e py nox
``` ```
## Copying this example ## Copying this example

View File

@ -1,5 +1,5 @@
[template] [template]
ignore = [".tox"] ignore = [".tox", ".nox"]
[hooks] [hooks]
pre = [".template/pre-script.rhai"] pre = [".template/pre-script.rhai"]

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install("-e", ".")
session.run("pytest")

View File

@ -1,5 +0,0 @@
[testenv]
usedevelop = true
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands = pytest {posargs}

View File

@ -35,10 +35,10 @@ pytest -v tests
## Testing ## Testing
To test install tox globally and run To test install nox globally and run
```shell ```shell
tox -e py nox
``` ```
## Copying this example ## Copying this example

View File

@ -1,5 +1,5 @@
[template] [template]
ignore = [".tox"] ignore = [".tox", ".nox"]
[hooks] [hooks]
pre = [".template/pre-script.rhai"] pre = [".template/pre-script.rhai"]

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install("-e", ".")
session.run("pytest")

View File

@ -1,5 +0,0 @@
[testenv]
usedevelop = true
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands = pytest {posargs}

View File

@ -56,7 +56,7 @@ We are using `pytest-benchmark` to benchmark four word count functions:
3. Rust sequential version 3. Rust sequential version
4. Rust sequential version executed twice with two Python threads 4. Rust sequential version executed twice with two Python threads
The benchmark script can be found [here](https://github.com/PyO3/pyo3/blob/main/examples/word-count/tests/test_word_count.py), and we can run `tox` in the `word-count` folder to benchmark these functions. The benchmark script can be found [here](https://github.com/PyO3/pyo3/blob/main/examples/word-count/tests/test_word_count.py), and we can run `nox` in the `word-count` folder to benchmark these functions.
While the results of the benchmark of course depend on your machine, the relative results should be similar to this (mid 2020): While the results of the benchmark of course depend on your machine, the relative results should be similar to this (mid 2020):
```ignore ```ignore

6
noxfile.py Normal file
View File

@ -0,0 +1,6 @@
import nox
@nox.session(python=["3.7", "3.8", "3.9", "3.10"])
def test(session):
session.run("cargo", "test", external=True)

View File

@ -9,10 +9,11 @@ exclude = '''
| \.git # root of the project | \.git # root of the project
| \.mypy_cache | \.mypy_cache
| \.tox | \.tox
| \.nox
| \.venv | \.venv
| venv | venv
| target | target
| dist | dist
)/ )/
) )
''' '''

View File

@ -1,6 +1,6 @@
# PyO3 Python tests # PyO3 Python tests
These crates are a collection of test extension modules built with PyO3. They are all tested using `tox` in PyO3's CI. These crates are a collection of test extension modules built with PyO3. They are all tested using `nox` in PyO3's CI.
Below is a brief description of each of these: Below is a brief description of each of these:

View File

@ -11,8 +11,8 @@ python setup.py develop
pytest pytest
``` ```
Or with tox: Or with nox:
```shell ```shell
tox -e py nox
``` ```

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install("-e", ".")
session.run("pytest", "--benchmark-sort=name")

View File

@ -1,8 +0,0 @@
[testenv]
usedevelop = True
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands = pytest --benchmark-sort=name {posargs}
# Use recreate so that tox always rebuilds, otherwise changes to Rust are not
# picked up.
recreate = True

View File

@ -12,8 +12,8 @@ maturin develop
pytest pytest
``` ```
Alternatively, install tox and run the tests inside an isolated environment: Alternatively, install nox and run the tests inside an isolated environment:
```shell ```shell
tox -e py nox
``` ```

View File

@ -0,0 +1,8 @@
import nox
@nox.session
def python(session):
session.install("-rrequirements-dev.txt")
session.install(".")
session.run("pytest")

View File

@ -1,10 +0,0 @@
[tox]
# can't install from sdist because local pyo3 repo can't be included in the sdist
skipsdist = true
[testenv]
description = Run the unit tests under {basepython}
deps = -rrequirements-dev.txt
commands =
python -m pip install .
pytest {posargs}

14
tox.ini
View File

@ -1,14 +0,0 @@
[tox]
envlist = py37,
py38,
py39,
py310,
minversion = 3.7.0
skip_missing_interpreters = true
[testenv]
description = Run the unit tests under {basepython}
skip_install = True
usedevelop = True
whitelist_externals = cargo
commands = cargo test

View File

@ -58,14 +58,22 @@ fn run_python_tests<'a>(
) -> Result<()> { ) -> Result<()> {
for entry in std::fs::read_dir("pytests")? { for entry in std::fs::read_dir("pytests")? {
let path = entry?.path(); let path = entry?.path();
if path.is_dir() && path.join("tox.ini").exists() { if path.is_dir() && path.join("noxfile.py").exists() {
run(Command::new("tox").arg("-c").arg(path).envs(env))?; run(Command::new("nox")
.arg("--non-interactive")
.arg("-f")
.arg(path.join("noxfile.py"))
.envs(env))?;
} }
} }
for entry in std::fs::read_dir("examples")? { for entry in std::fs::read_dir("examples")? {
let path = entry?.path(); let path = entry?.path();
if path.is_dir() && path.join("tox.ini").exists() { if path.is_dir() && path.join("noxfile.py").exists() {
run(Command::new("tox").arg("-c").arg(path).envs(env))?; run(Command::new("nox")
.arg("--non-interactive")
.arg("-f")
.arg(path.join("noxfile.py"))
.envs(env))?;
} }
} }
Ok(()) Ok(())
@ -81,7 +89,6 @@ fn get_coverage_env() -> Result<HashMap<String, String>> {
env.insert(key.to_owned(), value.trim_matches('"').to_owned()); env.insert(key.to_owned(), value.trim_matches('"').to_owned());
} }
env.insert("TOX_TESTENV_PASSENV".to_owned(), "*".to_owned());
env.insert("RUSTUP_TOOLCHAIN".to_owned(), "nightly".to_owned()); env.insert("RUSTUP_TOOLCHAIN".to_owned(), "nightly".to_owned());
Ok(env) Ok(env)