2025, Oct 21 07:00
Fix fastparquet installation failures on Python 3.8: resolve pip puccinialin error by pinning cramjam 2.10.0
Installing fastparquet < 2024.2.0 on Python 3.8 may fail with a pip puccinialin error. See why cramjam causes it and how pinning cramjam 2.10.0 fixes installs
Installing fastparquet on Python 3.8 can unexpectedly fail when you target older releases. If you install a version below 2024.2.0, pip may stop with a distribution error that looks unrelated to your direct dependencies.
Reproducing the install failure
On Python 3.8, a straightforward install of fastparquet below 2024.2.0 triggers an error:
python3.8 -m pip install "fastparquet<2024.2.0"
ERROR: Could not find a version that satisfies the requirement puccinialin (from versions: none)
ERROR: No matching distribution found for puccinialin
What’s going on
The failure is tied to a fastparquet dependency constraint. fastparquet requires cramjam>=2.3. Under Python 3.8 and with the specified fastparquet range, this dependency chain leads to the installation error above.
The fix
Pinning the dependency resolves the resolver dead-end. Setting cramjam to an explicit version works:
python3.8 -m pip install "fastparquet<2024.2.0" "cramjam==2.10.0"
If you are using a requirements file, declare both constraints so environments remain reproducible:
fastparquet<2024.2.0
cramjam==2.10.0
Then install as usual:
python3.8 -m pip install -r requirements.txt
Why this matters
Legacy Python versions amplify the importance of precise dependency management. Even when your top-level package is compatible, its transitive dependencies may surface platform- or version-specific gaps. Being explicit about versions prevents resolver surprises and keeps builds stable across machines and CI.
Takeaways
If you target Python 3.8 and need fastparquet below 2024.2.0, rely on an explicit pin for the dependent library. Install fastparquet with cramjam==2.10.0 to avoid the distribution error, and bake these constraints into your environment definitions to keep installations consistent.
The article is based on a question from StackOverflow by korolkevichm and an answer by korolkevichm.