I have a python project and I have tried to follow the Hypermodern Python Project guidelines for testing with Poetry
and nox
and pyenv
.
This is on Debian 10 running on WLS2.
> lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
I have these versions of Python installed with pyenv
:
> pyenv versions
system
3.10.2
* 3.7.12
* 3.8.12
* 3.9.10
and versions 3.7.12, 3.8.12 and 3.9.10 are enabled for this project with pyenv local
.
In my noxfile.py
my tests
session is like this:
@session(python=["3.7", "3.9", "3.8"])
def tests(session: Session) -> None:
"""Run the test suite."""
session.install(".")
session.install("coverage[toml]", "pytest")
session.run("pytest", *args)
I would expect that when I invoke nox
to run my tests with poetry run nox -s tests
, it would run in all three of these versions of Python, as shown in the Hypermodern example.
Instead, I see this:
nox > Running session tests-3.7
nox > Creating virtual environment (virtualenv) using python3.7 in .nox/tests-3-7
nox > poetry build --format=wheel
...
nox > Session tests-3.7 was successful.
nox > Running session tests-3.9
nox > Session tests-3.9 skipped: Python interpreter 3.9 not found.
nox > Running session tests-3.8
nox > Session tests-3.8 skipped: Python interpreter 3.8 not found.
nox > Ran multiple sessions:
nox > * tests-3.7: success
nox > * tests-3.9: skipped
nox > * tests-3.8: skipped
I have tried various combinations of pyenv global
and pyenv local
. I have run poetry upgrade
after setting the multiple version with pyenv
. Ditto re-running poetry install
.
I have been unsuccessful searching for an answer on the interwebs and I'm hoping someone here can point me on the right path.
I ran pyenv shell 3.8.12
etc., as hinted in a related StackOverflow, but that did not seem to do the trick. That same article suggested updating ~/.profile
and ~/.bashrc
, but that did not help either.
I uninstalled and reinstalled poetry
:
curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | python3 -
and no change.
I also chased the ideas from this StackOverflow, to no avail.
Solution: Based on the tip from Espoir Murhabazi to focus on this StackOverflow, I focused on the
pyenv
leg of the triangle. After reading and experimenting more with getting my bashPATH
right forpyenv
, I was eventually able to get the expected results when I runpoetry run nox -s tests
afterpyenv local 3.7.12 3.8.12 3.9.10
. That is:Sweet success!
What ended up doing:
I removed any reference to
Poetry
andpyenv
that had crept into my.bash_profile
and my.bashrc
. At the end of my.profile
I ended up with these commands which did the trick:This sets up
pyenv
thenpoetry
early in my path. I think they may have been later in the path before I started messing around. MyPATH
now looks like this, and all is well betweenpyenv
,Poetry
andnox
. Thank you @Espoir Murhabazi.Poring over the pyenv README helped arrive at this solution.