# QuantEcon.py keeps its version in the module, ships the NumPy 2 environment file, and prints a BibTeX entry that never closes

> A community based Python library for quantitative economics, MIT licensed and released as v0.12.0 in September 2026. The packaging metadata is where the interesting facts are: a dynamic version, a Python floor of 3.12 sitting next to much older dependency floors, an sdist exclude list that matches one file name and misses another, and a documentation URL served over http.

**QuantEcon/QuantEcon.py** — A community based Python library for quantitative economics

- Repository: https://github.com/QuantEcon/QuantEcon.py
- Website: https://quanteconpy.readthedocs.io/en/latest/
- Stars: 2,405 · Forks: 2,286
- Language: Python
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/quantecon-quantecon-py

## The version number is not written in pyproject.toml

The build backend is flit_core, pinned to `flit_core >=3.5,<4`, and the project table declares `dynamic = ["description", "version"]`. Nothing in the file holds either value, so both come from the package itself, and the readme field points at README.md for the long description. That is why the usage section tells you to check a number you cannot find in the packaging metadata:

```python
import quantecon as qe
```

then `print(qe.__version__)`, and to run `pip install --upgrade quantecon` if what you have is below what PyPI offers. Recent tags were v0.12.0 on 2026-09-24, v0.11.4 on 2026-07-15 and v0.11.3 on 2026-07-08, so the release cadence runs monthly. The last push on the default branch is dated 2026-10-03, which is after the newest tag, so that branch is ahead of the newest published version.

## A Python 3.12 floor beside three much older dependency floors

`requires-python = ">=3.12"` and the classifiers name 3.12, 3.13 and 3.14. The three runtime dependencies carry floors that sit far below that: `numba>=0.56.0`, `numpy>=1.17.0` and `scipy>=1.5.0`, plus `requests` with no constraint at all. Nothing in the file explains the distance between a current Python floor and those numbers, so a resolver can pick a combination the project has not pinned together. The same root holds two conda environment files, `environment.yml` and `environment_np2.yml`, so the project tracks two dependency sets in one place. The README opens by calling the library high performance, and numba is the only dependency that could carry that claim, but no measurement appears in the file or the metadata to back it.

## The sdist exclude list names one readthedocs file and misses the other

Flit ships a curated source distribution, and the exclude list is explicit:

```
docs/
quantecon/tests/
quantecon/util/tests
Makefile
environment.yml
readthedocs.yml
```

Any hidden folder or file is dropped by the first entry, `.*`. Two details are worth checking against the actual root. The list says `readthedocs.yml`, while the tree carries `.readthedocs.yaml`, a different name in a different format, so that exclusion does not name the file that exists. The list removes `environment.yml` but says nothing about `environment_np2.yml`, so the NumPy 2 environment file travels inside the published archive while its counterpart stays out. The test directories are cut too, which means the clone-and-install path in the README is the only place the suite exists.

## The project has three different home pages depending on where you look

The homepage for this repository is `https://quanteconpy.readthedocs.io/en/latest/`. The urls table in pyproject.toml gives `Homepage = "https://quantecon.org/quantecon-py/"` and `Documentation = "http://quanteconpy.readthedocs.io/en/latest/"`, so the same documentation site appears twice under two names and once over plain http. The README badges point at the stable and the latest readthedocs builds, the PyPI project page, and the conda-forge channel, and the PyPI badge is printed twice in that block with the conda-forge badge between the two copies. If you are writing tooling that reads a canonical url, there is no single place in this repository that settles it.

## conda-forge users are told how to install but not how to upgrade

The installation section recommends installing the Anaconda distribution first, then offers two paths: `pip install quantecon` or `conda install -c conda-forge quantecon`. The upgrade instruction that follows covers only pip: `pip install --upgrade quantecon`, after a version check with `print(qe.__version__)`. A conda user who installed through the conda-forge channel is given no matching upgrade command.

The third path is the repository itself, `git clone https://github.com/QuantEcon/QuantEcon.py`, then `cd QuantEcon.py` and `pip install .`. That last command installs whatever the default branch holds, and the clone is unpinned, so it tracks the moving tip rather than a tag. It is also the only path that gives you the test suite, since the sdist excludes both test directories.

## The BibTeX entry stops before its closing brace

The README asks users to cite the library and prints an entry for LaTeX users, starting from the JOSS article with DOI `10.21105/joss.05585`, year 2024, volume 9, number 93, pages 5585, and thirteen authors. The last line of that entry reads:

```
url = {https://joss.theoj.org/papers/10.21105/joss
```

The line ends there, and so does the entry, with no closing brace on the url field and no closing brace for the entry itself. Pasting it as printed produces a BibTeX file that will not parse. The paper it points at is from 2024, while the newest tag is v0.12.0 from 2026-09-24, so the citation and the current version do not line up either. The root also carries CITATION.cff, which is the file citation tooling reads first.

## The testing extras are the only dependencies without floors

Runtime dependencies all carry version floors. The optional testing group does not: `pytest`, `coverage`, `flake8`, `numpy`, `scipy`, `pandas` and `numba` are all unpinned, so a test run resolves against whatever versions the environment offers. The root agrees with that picture and adds the tooling: `pytest.ini`, `.coveragerc`, a `ci/` directory, and a badge row pointing at a GitHub Actions workflow named `ci.yml` and at coveralls. The README's contribution note is one sentence about contributing changes back, while the root also holds `CONTRIBUTING.md` and `AGENTS.md` that it never mentions. Funding is named in prose, the Alfred P. Sloan Foundation, while the funding url in pyproject.toml points at quantecon.org.

## Conclusion

quantecon is a reasonable dependency for a course, a lecture, or a research script that already runs on Python 3.12 and above, and the packaging is honest about the runtime it needs. Before depending on it, read the four runtime floors rather than the package name, since the metadata asks for a current Python and accepts much older numba, numpy and scipy. If you build distributions rather than install them, check whether the sdist you publish carries the NumPy 2 environment file, because the exclude list names the other one. Pin a version instead of tracking main, and take the citation from the JOSS record rather than copying the README entry, which does not close.

## FAQ

### What Python version does quantecon require?

The packaging metadata sets requires-python to >=3.12 and lists classifiers for Python 3.12, 3.13 and 3.14.

### How do I install quantecon without pip?

The README gives a conda-forge path, conda install -c conda-forge quantecon, and recommends installing the Anaconda distribution first.

### Where can I see which version of quantecon I have?

Import it as quantecon and print qe.__version__. The version is not in pyproject.toml, it is declared dynamic and taken from the package module.

### Does the quantecon source distribution include the test suite?

No. The sdist exclude list removes quantecon/tests/ and quantecon/util/tests, so the suite is only present in a repository clone.

### What license is quantecon released under?

MIT. The README states it is MIT licensed and free to use without charge or restriction, and the packaging metadata points the license field at the LICENSE file in the root.

## Sources

- [License: MIT](https://github.com/QuantEcon/QuantEcon.py/blob/main/LICENSE)
- [Project website](https://quanteconpy.readthedocs.io/en/latest/)
- [QuantEcon/QuantEcon.py on GitHub](https://github.com/QuantEcon/QuantEcon.py)
- [README](https://github.com/QuantEcon/QuantEcon.py/blob/main/README.md)
- [Releases](https://github.com/QuantEcon/QuantEcon.py/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/quantecon-quantecon-py
