python-poetry / python-poetry/poetry
Poetry 2.0 doesn't support the latest PyPy release
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 34.3k
- Forks
- 2.5k
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 30
Description
Description
PyPy installs a few packages required for operation that are normally on PyPI into its stdlib folder. These are cffi, greenlet, hpy, and readline. In the latest release of PyPy, cffi (for PyPy 3.10 and 3.11) as well as hpy (only on PyPy 3.11) are unreleased versions that are not available on PyPI. Poetry doesn't seem to notice that these are not in site-packages, and even thinks it can remove them directly from the standard library (I think it doesn't actually uninstall them). I hit it on a minimal template using Poetry's versioning plugin.
Here's a MWE:
$ docker run --rm -it ubuntu:24.04
# apt update && apt install wget git bzip2 -y
# wget https://downloads.python.org/pypy/pypy3.10-v7.3.18-linux64.tar.bz2
# tar -xvf pypy3.10-v7.3.18-linux64.tar.bz2 -C /usr/local --strip-components=1
# pypy3 -m ensurepip
# pypy3 -m pip install poetry cookiecutter
# cookiecutter gh:scientific-python/cookie # Select Poetry backend (4) and all other defaults
# cd package
# poetry sync
Creating virtualenv package-ymOHZpyv-py3.10 in /root/.cache/pypoetry/virtualenvs
Ensuring that the Poetry plugins required by the project are available...
The following Poetry plugins are required by the project but are not installed in Poetry's environment:
- poetry-dynamic-versioning[plugin] (>=1.0.0)
Installing Poetry plugins only for the current project...
Updating dependencies
Resolving dependencies... (7.1s)
Because poetry-project-instance depends on cffi (1.18.0.dev0) which doesn't match any versions, version solving failed.
You can see what's happening if you leave off the VCS plugin:
# cookiecutter gh:scientific-python/cookie # Select Poetry backend (4) and select "no" for vcs versioning
# cd package
# poetry sync
Creating virtualenv package-ymOHZpyv-py3.10 in /root/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (3.3s)
Package operations: 8 installs, 0 updates, 4 removals
- Removing cffi (1.18.0.dev0)
- Removing greenlet (0.4.13)
- Removing hpy (0.9.0)
- Removing readline (6.2.4.1)
- Installing packaging (24.2)
- Installing tomli (2.2.1)
- Installing exceptiongroup (1.2.2)
- Installing iniconfig (2.0.0)
- Installing pluggy (1.5.0)
- Installing coverage (7.6.12)
- Installing pytest (8.3.4)
- Installing pytest-cov (6.0.0)
Writing lock file
Installing the current project: package (0.1.0)
But these packages are in PyPy's standard library! You can still see and import cffi in the environment, even though it claims it's been "removed".
Too many of poetry's dependencies don't provide PyPy3.11 pre-built wheels to test this on 3.11, but I assume hpy might also complain in that case.
Using Poetry from pipx does the same thing.
Workarounds
I believe Poetry just needs to ignore any package that are in Python's standard library. I'm not sure the best case for locking with a package that includes one of these dependencies, but since you can't install these (the stdlib version takes precedence anyway), I think they should just be ignored - that's basically what already happens on older PyPy's, except Poetry is now tripping up over not being able to find the unreleased versions on PyPy.
Poetry Installation Method
pip
Operating System
ubuntu 24.04
Poetry Version
Poetry (version 2.0.1)
Poetry Configuration
cache-dir = "/root/.cache/pypoetry"
installer.max-workers = null
installer.no-binary = null
installer.only-binary = null
installer.parallel = true
installer.re-resolve = true
keyring.enabled = true
requests.max-retries = 0
solver.lazy-wheel = true
system-git-client = false
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /root/.cache/pypoetry/virtualenvs
virtualenvs.prompt = "{project_name}-py{python_version}"
virtualenvs.use-poetry-python = false
Python Sysconfig
sysconfig.log
Platform: "linux-x86_64"
Python version: "3.10"
Current installation scheme: "posix_prefix"
Paths:
data = "/usr/local"
include = "/usr/local/include/pypy3.10"
platinclude = "/usr/local/include/pypy3.10"
platlib = "/usr/local/lib/pypy3.10/site-packages"
platstdlib = "/usr/local/lib/pypy3.10"
purelib = "/usr/local/lib/pypy3.10/site-packages"
scripts = "/usr/local/bin"
stdlib = "/usr/local/lib/pypy3.10"
Variables:
ABIFLAGS = ""
AR = "ar"
ARFLAGS = "rc"
CC = "cc -pthread"
CCSHARED = "-fPIC"
CFLAGS = "-DNDEBUG -O2"
CONFINCLUDEPY = "/usr/local/include/pypy3.10"
CXX = "c++ -pthread"
EXE = ""
EXT_SUFFIX = ".pypy310-pp73-x86_64-linux-gnu.so"
INCLUDEPY = "/usr/local/include/pypy3.10"
LDCXXSHARED = "c++ -shared -Wl,-O1 -Wl,-Bsymbolic-functions"
LDFLAGS = "-Wl,-Bsymbolic-functions"
LDLIBRARY = "libpypy3.9-c.so"
LDSHARED = "cc -pthread -shared -Wl,-Bsymbolic-functions"
LDVERSION = "3.10"
LIBDIR = "/usr/local/bin"
LIBRARY = ""
MULTIARCH = "x86_64-linux-gnu"
OPT = "-DNDEBUG -O2"
Py_DEBUG = "0"
Py_ENABLE_SHARED = "0"
SHLIB_SUFFIX = ".so"
SIZEOF_VOID_P = "8"
SO = ".pypy310-pp73-x86_64-linux-gnu.so"
SOABI = "pypy310-pp73"
TZPATH = "/usr/local/share/zoneinfo:/usr/local/lib/zoneinfo:/usr/local/share/lib/zoneinfo:/usr/local/../etc/zoneinfo:/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
VERSION = "3.10"
abiflags = ""
base = "/usr/local"
exec_prefix = "/usr/local"
implementation = "PyPy"
implementation_lower = "pypy"
installed_base = "/usr/local"
installed_platbase = "/usr/local"
platbase = "/usr/local"
platlibdir = "lib"
prefix = "/usr/local"
projectbase = "/usr/local/bin"
py_version = "3.10.16"
py_version_nodot = "310"
py_version_nodot_plat = ""
py_version_short = "3.10"
srcdir = "/usr/local/bin"
userbase = "/root/.local"
Example pyproject.toml
[build-system]
requires = ["poetry-core>=2.0.0", "poetry-dynamic-versioning"]
build-backend = "poetry_dynamic_versioning.backend"
[project]
name = "package"
authors = [
{ name = "My Name", email = "me@email.com" },
]
description = "A great package."
readme = "README.md"
requires-python = ">=3.9"
classifiers = [
"Development Status :: 1 - Planning",
"Intended Audience :: Science/Research",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering",
"Typing :: Typed",
]
dynamic = ["version"]
dependencies = []
[project.optional-dependencies]
test = [
"pytest >=6",
"pytest-cov >=3",
]
dev = [
"pytest >=6",
"pytest-cov >=3",
]
docs = [
"sphinx>=7.0",
"myst_parser>=0.13",
"sphinx_copybutton",
"sphinx_autodoc_typehints",
"furo>=2023.08.17",
]
[project.urls]
Homepage = "https://github.com/org/package"
"Bug Tracker" = "https://github.com/org/package/issues"
Discussions = "https://github.com/org/package/discussions"
Changelog = "https://github.com/org/package/releases"
[tool.poetry]
version = "0.0.0"
[tool.poetry.requires-plugins]
poetry-dynamic-versioning = { version = ">=1.0.0", extras = ["plugin"] }
[tool.poetry-dynamic-versioning]
enable = true
substitution.files = ["src/package/__init__.py"]
[tool.poetry.group.test.dependencies]
pytest = ">= 6"
pytest-cov = ">= 3"
Poetry Runtime Logs
poetry-runtime.log
Loading configuration file /root/.config/pypoetry/config.toml
Trying to detect current active python executable as specified in the config.
Found: /usr/local/bin/python
Using virtualenv: /root/.cache/pypoetry/virtualenvs/package-ymOHZpyv-py3.10
Ensuring that the Poetry plugins required by the project are available...
The following Poetry plugins are required by the project but are not installed in Poetry's environment:
- poetry-dynamic-versioning[plugin] (>=1.0.0)
Installing Poetry plugins only for the current project...
Updating dependencies
Resolving dependencies...
1: fact: poetry-project-instance is 0
1: derived: poetry-project-instance
1: fact: poetry-project-instance depends on cffi (1.18.0.dev0)
1: fact: poetry-project-instance depends on greenlet (0.4.13)
1: fact: poetry-project-instance depends on hpy (0.9.0)
1: fact: poetry-project-instance depends on readline (6.2.4.1)
1: fact: poetry-project-instance depends on secretstorage (3.3.3)
1: fact: poetry-project-instance depends on backports-tarfile (1.2.0)
1: fact: poetry-project-instance depends on build (1.2.2.post1)
1: fact: poetry-project-instance depends on cachecontrol (0.14.2)
1: fact: poetry-project-instance depends on certifi (2025.1.31)
1: fact: poetry-project-instance depends on charset-normalizer (3.4.1)
1: fact: poetry-project-instance depends on cleo (2.1.0)
1: fact: poetry-project-instance depends on crashtest (0.4.1)
1: fact: poetry-project-instance depends on cryptography (44.0.1)
1: fact: poetry-project-instance depends on distlib (0.3.9)
1: fact: poetry-project-instance depends on dulwich (0.22.7)
1: fact: poetry-project-instance depends on fastjsonschema (2.21.1)
1: fact: poetry-project-instance depends on filelock (3.17.0)
1: fact: poetry-project-instance depends on idna (3.10)
1: fact: poetry-project-instance depends on importlib-metadata (8.6.1)
1: fact: poetry-project-instance depends on installer (0.7.0)
1: fact: poetry-project-instance depends on jaraco-classes (3.4.0)
1: fact: poetry-project-instance depends on jaraco-context (6.0.1)
1: fact: poetry-project-instance depends on jaraco-functools (4.1.0)
1: fact: poetry-project-instance depends on jeepney (0.8.0)
1: fact: poetry-project-instance depends on keyring (25.6.0)
1: fact: poetry-project-instance depends on more-itertools (10.6.0)
1: fact: poetry-project-instance depends on msgpack (1.1.0)
1: fact: poetry-project-instance depends on packaging (24.2)
1: fact: poetry-project-instance depends on pkginfo (1.12.0)
1: fact: poetry-project-instance depends on platformdirs (4.3.6)
1: fact: poetry-project-instance depends on poetry (2.0.1)
1: fact: poetry-project-instance depends on poetry-core (2.0.1)
1: fact: poetry-project-instance depends on pyproject-hooks (1.2.0)
1: fact: poetry-project-instance depends on rapidfuzz (3.12.1)
1: fact: poetry-project-instance depends on requests (2.32.3)
1: fact: poetry-project-instance depends on requests-toolbelt (1.0.0)
1: fact: poetry-project-instance depends on shellingham (1.5.4)
1: fact: poetry-project-instance depends on tomli (2.2.1)
1: fact: poetry-project-instance depends on tomlkit (0.13.2)
1: fact: poetry-project-instance depends on trove-classifiers (2025.1.15.22)
1: fact: poetry-project-instance depends on urllib3 (2.3.0)
1: fact: poetry-project-instance depends on virtualenv (20.29.2)
1: fact: poetry-project-instance depends on zipp (3.21.0)
1: fact: poetry-project-instance depends on pip (25.0.1)
1: fact: poetry-project-instance depends on setuptools (65.5.0)
1: fact: poetry-project-instance depends on poetry-dynamic-versioning[plugin] (>=1.0.0)
1: selecting poetry-project-instance (0)
1: derived: poetry-dynamic-versioning[plugin] (>=1.0.0)
1: derived: setuptools (==65.5.0)
1: derived: pip (==25.0.1)
1: derived: zipp (==3.21.0)
1: derived: virtualenv (==20.29.2)
1: derived: urllib3 (==2.3.0)
1: derived: trove-classifiers (==2025.1.15.22)
1: derived: tomlkit (==0.13.2)
1: derived: tomli (==2.2.1)
1: derived: shellingham (==1.5.4)
1: derived: requests-toolbelt (==1.0.0)
1: derived: requests (==2.32.3)
1: derived: rapidfuzz (==3.12.1)
1: derived: pyproject-hooks (==1.2.0)
1: derived: poetry-core (==2.0.1)
1: derived: poetry (==2.0.1)
1: derived: platformdirs (==4.3.6)
1: derived: pkginfo (==1.12.0)
1: derived: packaging (==24.2)
1: derived: msgpack (==1.1.0)
1: derived: more-itertools (==10.6.0)
1: derived: keyring (==25.6.0)
1: derived: jeepney (==0.8.0)
1: derived: jaraco-functools (==4.1.0)
1: derived: jaraco-context (==6.0.1)
1: derived: jaraco-classes (==3.4.0)
1: derived: installer (==0.7.0)
1: derived: importlib-metadata (==8.6.1)
1: derived: idna (==3.10)
1: derived: filelock (==3.17.0)
1: derived: fastjsonschema (==2.21.1)
1: derived: dulwich (==0.22.7)
1: derived: distlib (==0.3.9)
1: derived: cryptography (==44.0.1)
1: derived: crashtest (==0.4.1)
1: derived: cleo (==2.1.0)
1: derived: charset-normalizer (==3.4.1)
1: derived: certifi (==2025.1.31)
1: derived: cachecontrol (==0.14.2)
1: derived: build (==1.2.2.post1)
1: derived: backports-tarfile (==1.2.0)
1: derived: secretstorage (==3.3.3)
1: derived: readline (==6.2.4.1)
1: derived: hpy (==0.9.0)
1: derived: greenlet (==0.4.13)
1: derived: cffi (==1.18.0.dev0)
Checking if keyring is available
[keyring:keyring.backend] Loading KWallet
[keyring:keyring.backend] Loading SecretService
[keyring:keyring.backend] Loading Windows
[keyring:keyring.backend] Loading chainer
[keyring:keyring.backend] Loading libsecret
[keyring:keyring.backend] Loading macOS
Backend 'fail Keyring' is not suitable
No valid keyring backend was found
Creating new session for pypi.org
Source (PyPI): 14 packages found for poetry-dynamic-versioning >=1.0.0
Source (PyPI): 1 packages found for setuptools 65.5.0
Source (PyPI): 1 packages found for pip 25.0.1
Source (PyPI): 1 packages found for zipp 3.21.0
Source (PyPI): 1 packages found for virtualenv 20.29.2
Source (PyPI): 1 packages found for urllib3 2.3.0
Source (PyPI): 1 packages found for trove-classifiers 2025.1.15.22
Source (PyPI): 1 packages found for tomlkit 0.13.2
Source (PyPI): 1 packages found for tomli 2.2.1
Source (PyPI): 1 packages found for shellingham 1.5.4
Source (PyPI): 1 packages found for requests-toolbelt 1.0.0
Source (PyPI): 1 packages found for requests 2.32.3
Source (PyPI): 1 packages found for rapidfuzz 3.12.1
Source (PyPI): 1 packages found for pyproject-hooks 1.2.0
Source (PyPI): 1 packages found for poetry-core 2.0.1
Source (PyPI): 1 packages found for poetry 2.0.1
Source (PyPI): 1 packages found for platformdirs 4.3.6
Source (PyPI): 1 packages found for pkginfo 1.12.0
Source (PyPI): 1 packages found for packaging 24.2
Source (PyPI): 1 packages found for msgpack 1.1.0
Source (PyPI): 1 packages found for more-itertools 10.6.0
Source (PyPI): 1 packages found for keyring 25.6.0
Source (PyPI): 1 packages found for jeepney 0.8.0
Source (PyPI): 1 packages found for jaraco-functools 4.1.0
Source (PyPI): 1 packages found for jaraco-context 6.0.1
Source (PyPI): 1 packages found for jaraco-classes 3.4.0
Source (PyPI): 1 packages found for installer 0.7.0
Source (PyPI): 1 packages found for importlib-metadata 8.6.1
Source (PyPI): 1 packages found for idna 3.10
Source (PyPI): 1 packages found for filelock 3.17.0
Source (PyPI): 1 packages found for fastjsonschema 2.21.1
Source (PyPI): 1 packages found for dulwich 0.22.7
Source (PyPI): 1 packages found for distlib 0.3.9
Source (PyPI): 1 packages found for cryptography 44.0.1
Source (PyPI): 1 packages found for crashtest 0.4.1
Source (PyPI): 1 packages found for cleo 2.1.0
Source (PyPI): 1 packages found for charset-normalizer 3.4.1
Source (PyPI): 1 packages found for certifi 2025.1.31
Source (PyPI): 1 packages found for cachecontrol 0.14.2
Source (PyPI): 1 packages found for build 1.2.2.post1
Source (PyPI): 1 packages found for backports-tarfile 1.2.0
Source (PyPI): 1 packages found for secretstorage 3.3.3
Source (PyPI): 1 packages found for readline 6.2.4.1
Source (PyPI): 1 packages found for hpy 0.9.0
Source (PyPI): 1 packages found for greenlet 0.4.13
Source (PyPI): 0 packages found for cffi 1.18.0.dev0
1: selecting setuptools (65.5.0)
1: selecting pip (25.0.1)
1: selecting zipp (3.21.0)
1: fact: virtualenv (20.29.2) depends on distlib (>=0.3.7,<1)
1: fact: virtualenv (20.29.2) depends on filelock (>=3.12.2,<4)
1: fact: virtualenv (20.29.2) depends on platformdirs (>=3.9.1,<5)
1: selecting virtualenv (20.29.2)
1: selecting urllib3 (2.3.0)
1: selecting trove-classifiers (2025.1.15.22)
1: selecting tomlkit (0.13.2)
1: selecting tomli (2.2.1)
1: selecting shellingham (1.5.4)
1: fact: requests-toolbelt (1.0.0) depends on requests (>=2.0.1,<3.0.0)
1: selecting requests-toolbelt (1.0.0)
1: fact: requests (2.32.3) depends on charset-normalizer (>=2,<4)
1: fact: requests (2.32.3) depends on idna (>=2.5,<4)
1: fact: requests (2.32.3) depends on urllib3 (>=1.21.1,<3)
1: fact: requests (2.32.3) depends on certifi (>=2017.4.17)
1: selecting requests (2.32.3)
1: selecting rapidfuzz (3.12.1)
1: selecting pyproject-hooks (1.2.0)
1: selecting poetry-core (2.0.1)
1: fact: poetry (2.0.1) depends on build (>=1.2.1,<2.0.0)
1: fact: poetry (2.0.1) depends on cachecontrol[filecache] (>=0.14.0,<0.15.0)
1: fact: poetry (2.0.1) depends on cleo (>=2.1.0,<3.0.0)
1: fact: poetry (2.0.1) depends on dulwich (>=0.22.6,<0.23.0)
1: fact: poetry (2.0.1) depends on fastjsonschema (>=2.18.0,<3.0.0)
1: fact: poetry (2.0.1) depends on installer (>=0.7.0,<0.8.0)
1: fact: poetry (2.0.1) depends on keyring (>=25.1.0,<26.0.0)
1: fact: poetry (2.0.1) depends on packaging (>=24.0)
1: fact: poetry (2.0.1) depends on pkginfo (>=1.12,<2.0)
1: fact: poetry (2.0.1) depends on platformdirs (>=3.0.0,<5)
1: fact: poetry (2.0.1) depends on poetry-core (2.0.1)
1: fact: poetry (2.0.1) depends on pyproject-hooks (>=1.0.0,<2.0.0)
1: fact: poetry (2.0.1) depends on requests (>=2.26,<3.0)
1: fact: poetry (2.0.1) depends on requests-toolbelt (>=1.0.0,<2.0.0)
1: fact: poetry (2.0.1) depends on shellingham (>=1.5,<2.0)
1: fact: poetry (2.0.1) depends on tomli (>=2.0.1,<3.0.0)
1: fact: poetry (2.0.1) depends on tomlkit (>=0.11.4,<1.0.0)
1: fact: poetry (2.0.1) depends on trove-classifiers (>=2022.5.19)
1: fact: poetry (2.0.1) depends on virtualenv (>=20.26.6,<21.0.0)
1: fact: poetry (2.0.1) depends on xattr (>=1.0.0,<2.0.0)
1: selecting poetry (2.0.1)
1: derived: xattr (>=1.0.0,<2.0.0)
1: derived: cachecontrol[filecache] (>=0.14.0,<0.15.0)
Source (PyPI): 3 packages found for xattr >=1.0.0,<2.0.0
1: selecting platformdirs (4.3.6)
1: selecting pkginfo (1.12.0)
1: selecting packaging (24.2)
1: selecting msgpack (1.1.0)
1: selecting more-itertools (10.6.0)
1: fact: keyring (25.6.0) depends on pywin32-ctypes (>=0.2.0)
1: fact: keyring (25.6.0) depends on SecretStorage (>=3.2)
1: fact: keyring (25.6.0) depends on jeepney (>=0.4.2)
1: fact: keyring (25.6.0) depends on importlib_metadata (>=4.11.4)
1: fact: keyring (25.6.0) depends on jaraco.classes (*)
1: fact: keyring (25.6.0) depends on jaraco.functools (*)
1: fact: keyring (25.6.0) depends on jaraco.context (*)
1: selecting keyring (25.6.0)
1: derived: pywin32-ctypes (>=0.2.0)
Source (PyPI): 4 packages found for pywin32-ctypes >=0.2.0
1: selecting jeepney (0.8.0)
1: fact: jaraco-functools (4.1.0) depends on more-itertools (*)
1: selecting jaraco-functools (4.1.0)
1: fact: jaraco-context (6.0.1) depends on backports.tarfile (*)
1: selecting jaraco-context (6.0.1)
1: fact: jaraco-classes (3.4.0) depends on more-itertools (*)
1: selecting jaraco-classes (3.4.0)
1: selecting installer (0.7.0)
1: fact: importlib-metadata (8.6.1) depends on zipp (>=3.20)
1: selecting importlib-metadata (8.6.1)
1: selecting idna (3.10)
1: selecting filelock (3.17.0)
1: selecting fastjsonschema (2.21.1)
1: fact: dulwich (0.22.7) depends on urllib3 (>=1.25)
1: selecting dulwich (0.22.7)
1: selecting distlib (0.3.9)
1: fact: cryptography (44.0.1) depends on cffi (>=1.12)
1: selecting cryptography (44.0.1)
1: selecting crashtest (0.4.1)
1: fact: cleo (2.1.0) depends on crashtest (>=0.4.1,<0.5.0)
1: fact: cleo (2.1.0) depends on rapidfuzz (>=3.0.0,<4.0.0)
1: selecting cleo (2.1.0)
1: selecting charset-normalizer (3.4.1)
1: selecting certifi (2025.1.31)
1: fact: cachecontrol (0.14.2) depends on requests (>=2.16.0)
1: fact: cachecontrol (0.14.2) depends on msgpack (>=0.5.2,<2.0.0)
1: selecting cachecontrol (0.14.2)
1: fact: build (1.2.2.post1) depends on packaging (>=19.1)
1: fact: build (1.2.2.post1) depends on pyproject_hooks (*)
1: fact: build (1.2.2.post1) depends on colorama (*)
1: fact: build (1.2.2.post1) depends on tomli (>=1.1.0)
1: selecting build (1.2.2.post1)
1: derived: colorama
Source (PyPI): 43 packages found for colorama *
1: selecting backports-tarfile (1.2.0)
1: fact: secretstorage (3.3.3) depends on cryptography (>=2.0)
1: fact: secretstorage (3.3.3) depends on jeepney (>=0.6)
1: selecting secretstorage (3.3.3)
1: selecting readline (6.2.4.1)
1: fact: hpy (0.9.0) depends on setuptools (>=64.0)
1: selecting hpy (0.9.0)
1: selecting greenlet (0.4.13)
1: fact: cachecontrol[filecache] (0.14.2) depends on cachecontrol (0.14.2)
1: fact: cachecontrol[filecache] (0.14.2) depends on requests (>=2.16.0)
1: fact: cachecontrol[filecache] (0.14.2) depends on msgpack (>=0.5.2,<2.0.0)
1: fact: cachecontrol[filecache] (0.14.2) depends on filelock (>=3.8.0)
1: selecting cachecontrol[filecache] (0.14.2)
1: fact: no versions of cffi match 1.18.0.dev0
1: conflict: no versions of cffi match 1.18.0.dev0
1: ! cffi (==1.18.0.dev0) is satisfied by cffi (==1.18.0.dev0)
1: ! which is caused by "poetry-project-instance depends on cffi (1.18.0.dev0)"
1: ! thus: version solving failed
1: Version solving took 2.019 seconds.
1: Tried 1 solutions.
Stack trace:
4 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/puzzle/solver.py:166 in _solve
164│
165│ try:
→ 166│ result = resolve_version(self._package, self._provider)
167│
168│ packages = result.packages
3 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/mixology/__init__.py:18 in resolve_version
16│ solver = VersionSolver(root, provider)
17│
→ 18│ return solver.solve()
19│
2 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/mixology/version_solver.py:173 in solve
171│ next: str | None = self._root.name
172│ while next is not None:
→ 173│ self._propagate(next)
174│ next = self._choose_package_version()
175│
1 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/mixology/version_solver.py:212 in _propagate
210│ # where that incompatibility will allow us to derive new assignments
211│ # that avoid the conflict.
→ 212│ root_cause = self._resolve_conflict(incompatibility)
213│
214│ # Back jumping erases all the assignments we did at the previous
SolveFailureError
Because poetry-project-instance depends on cffi (1.18.0.dev0) which doesn't match any versions, version solving failed.
at ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/mixology/version_solver.py:427 in _resolve_conflict
423│ )
424│ self._log(f'! which is caused by "{most_recent_satisfier.cause}"')
425│ self._log(f"! thus: {incompatibility}")
426│
→ 427│ raise SolveFailureError(incompatibility)
428│
429│ def _choose_package_version(self) -> str | None:
430│ """
431│ Tries to select a version of a required package.
The following error occurred when trying to handle this error:
Stack trace:
14 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/application.py:327 in run
325│
326│ try:
→ 327│ exit_code = self._run(io)
328│ except BrokenPipeError:
329│ # If we are piped to another process, it may close early and send a
13 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/console/application.py:236 in _run
234│
235│ with directory(self._working_directory):
→ 236│ exit_code: int = super()._run(io)
237│
238│ return exit_code
12 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/application.py:431 in _run
429│ io.input.interactive(interactive)
430│
→ 431│ exit_code = self._run_command(command, io)
432│ self._running_command = None
433│
11 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/application.py:473 in _run_command
471│
472│ if error is not None:
→ 473│ raise error
474│
475│ return terminate_event.exit_code
10 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/application.py:457 in _run_command
455│
456│ if command_event.command_should_run():
→ 457│ exit_code = command.run(io)
458│ else:
459│ exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
9 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/commands/base_command.py:117 in run
115│ io.input.validate()
116│
→ 117│ return self.execute(io) or 0
118│
119│ def merge_application_definition(self, merge_args: bool = True) -> None:
8 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/cleo/commands/command.py:61 in execute
59│
60│ try:
→ 61│ return self.handle()
62│ except KeyboardInterrupt:
63│ return 1
7 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/console/commands/install.py:114 in handle
112│ from poetry.masonry.builders.editable import EditableBuilder
113│
→ 114│ PluginManager.ensure_project_plugins(self.poetry, self.io)
115│
116│ if self.option("extras") and self.option("all-extras"):
6 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/plugins/plugin_manager.py:69 in ensure_project_plugins
67│ @classmethod
68│ def ensure_project_plugins(cls, poetry: Poetry, io: IO) -> None:
→ 69│ ProjectPluginCache(poetry, io).ensure_plugins()
70│
71│ def load_plugins(self) -> None:
5 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/plugins/plugin_manager.py:247 in ensure_plugins
245│ f"Installing Poetry plugins only for the current project..."
246│ )
→ 247│ self._install(missing_plugins, poetry_env, installed_packages)
248│ self._io.write_line("")
249│ self._write_config()
4 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/plugins/plugin_manager.py:294 in _install
292│ installer.update(True)
293│
→ 294│ if installer.run() != 0:
295│ raise RuntimeError("Failed to install required Poetry plugins")
296│
3 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/installation/installer.py:103 in run
101│ self.verbose(True)
102│
→ 103│ return self._do_install()
104│
105│ def dry_run(self, dry_run: bool = True) -> Installer:
2 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/installation/installer.py:241 in _do_install
239│ source_root=self._env.path.joinpath("src")
240│ ):
→ 241│ solved_packages = solver.solve(
242│ use_latest=self._whitelist
243│ ).get_solved_packages()
1 ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/puzzle/solver.py:85 in solve
83│ with self._progress(), self._provider.use_latest_for(use_latest or []):
84│ start = time.time()
→ 85│ packages = self._solve()
86│ # simplify markers by removing redundant information
87│ for transitive_info in packages.values():
SolverProblemError
Because poetry-project-instance depends on cffi (1.18.0.dev0) which doesn't match any versions, version solving failed.
at ~/.local/share/pipx/venvs/poetry/lib/pypy3.10/site-packages/poetry/puzzle/solver.py:172 in _solve
168│ packages = result.packages
169│ except OverrideNeededError as e:
170│ return self._solve_in_compatibility_mode(e.overrides)
171│ except SolveFailureError as e:
→ 172│ raise SolverProblemError(e)
173│
174│ return self._aggregate_solved_packages(packages)
175│
176│ def _aggregate_solved_packages(
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the Ubuntu 24.04 Docker steps and inspect Poetry's dependency resolution and installation handling alongside the provided PyPy sysconfig paths. Check how cffi, greenlet, hpy, and readline are discovered, locked, and removed. Done means Poetry no longer tries to resolve unavailable PyPy stdlib packages or remove packages that remain importable from the standard library.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100