This is a collection of changelogs for Python packages used somewhere in Open edX. We intend to work with the community to make these discoverable programmatically from PyPI metadata, but for now we're just collecting these manually when we go to look up the history of a package (usually when upgrading it somewhere to see what changed). When adding a new entry, look up the package in PyPI to quickly find the latest information about it. You should generally add a link to the first up-to-date list of changes from the following list of candidates:
The package's official documentation (often published on Read the Docs)
A changelog file in the package's source repository (usually in the project root, occasionally in a "docs" directory)
The package's GitHub releases page, if each released version has useful notes on what changed
The package's PyPI page (usually this is generated from a changelog in the source repository, which would have been chosen above)
The repository's commit history
When adding or removing an entry, please leave "Notify watchers" checked. This allows a maintainer of the #pypi-releases Slack channel to be notified so we can keep its set of package release feeds up to date.
The current list of packages:
aniso8601: https://bitbucket.org/nielsenb/aniso8601/src/master/CHANGELOG.rst
anyio: https://anyio.readthedocs.io/en/latest/versionhistory.html
arrow: https://github.com/arrow-py/arrow/blob/master/CHANGELOG.rst
asgiref: https://github.com/django/asgiref/blob/main/CHANGELOG.txt
astroid: https://astroid.readthedocs.io/en/latest/changelog.html
awscli: https://github.com/aws/aws-cli/blob/develop/CHANGELOG.rst
babel: https://github.com/python-babel/babel/blob/master/CHANGES.rst
backoff: https://github.com/litl/backoff/blob/master/CHANGELOG.md
backports.functools-lru-cache: https://backportsfunctools-lru-cache.readthedocs.io/en/latest/history.html
beautifulsoup4: https://bazaar.launchpad.net/%7Eleonardr/beautifulsoup/bs4/view/head:/CHANGELOG
bleach: https://bleach.readthedocs.io/en/latest/changes.html
boto3: https://github.com/boto/boto3/blob/develop/CHANGELOG.rst
botocore: https://github.com/boto/botocore/blob/develop/CHANGELOG.rst
bpython: https://docs.bpython-interpreter.org/en/latest/changelog.html
build: https://pypa-build.readthedocs.io/en/stable/changelog.html#
cachetools: https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst
caniusepython3: https://github.com/brettcannon/caniusepython3#change-log
celery: https://github.com/celery/celery/blob/master/Changelog.rst
certifi: https://github.com/certifi/python-certifi/commits/master
charset-normalizer: https://github.com/Ousret/charset_normalizer/blob/master/CHANGELOG.md
code-annotations: https://github.com/edx/code-annotations/blob/master/CHANGELOG.rst
codecov: https://github.com/codecov/codecov-python/blob/master/CHANGELOG.md
colorama: https://github.com/tartley/colorama/blob/master/CHANGELOG.rst
configparser: https://github.com/jaraco/configparser/blob/main/NEWS.rst
contextlib2: https://github.com/jazzband/contextlib2/blob/master/NEWS.rst
coverage: https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst
coveralls: https://github.com/coveralls-clients/coveralls-python/blob/master/CHANGELOG.md
cryptography: https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst
datetime: https://github.com/zopefoundation/DateTime/blob/master/CHANGES.rst
dbus-python: https://gitlab.freedesktop.org/dbus/dbus-python/-/commits/master
defusedxml: https://github.com/tiran/defusedxml/blob/master/CHANGES.txt
diff-cover: https://github.com/Bachmann1234/diff-cover/blob/master/CHANGELOG
distlib: https://distlib.readthedocs.io/en/latest/overview.html#change-log-for-distlib
django-admin-sortable2: https://github.com/jrief/django-admin-sortable2/blob/master/docs/source/changelog.rst
django-braces: https://github.com/brack3t/django-braces/releases
django-celery-results: https://github.com/celery/django-celery-results/blob/master/Changelog
django-classy-tags: https://github.com/divio/django-classy-tags/blob/master/CHANGELOG.rst
django-config-models: https://github.com/edx/django-config-models/blob/master/CHANGELOG.rst
django-cookies-samesite: https://github.com/jotes/django-cookies-samesite/commits/master
django-cors-headers: https://github.com/ottoyiu/django-cors-headers/blob/master/HISTORY.rst
django-countries: https://github.com/SmileyChris/django-countries/blob/master/CHANGES.rst
django-crispy-forms: https://github.com/django-crispy-forms/django-crispy-forms/blob/master/CHANGELOG.md
django-crum: https://github.com/ninemoreminutes/django-crum/commits/master
django-debug-toolbar: https://django-debug-toolbar.readthedocs.io/en/latest/changes.html
django-dynamic-fixture: https://django-dynamic-fixture.readthedocs.io/en/latest/change_log.html
django-extensions: https://github.com/django-extensions/django-extensions/blob/master/CHANGELOG.md
django-extra-views: https://github.com/AndrewIngram/django-extra-views/blob/master/CHANGELOG.rst
django-fernet-fields: https://github.com/orcasgit/django-fernet-fields/blob/master/CHANGES.rst
django-filter: https://github.com/carltongibson/django-filter/blob/master/CHANGES.rst
django-guardian: https://github.com/django-guardian/django-guardian/blob/devel/CHANGES
django-haystack: https://github.com/django-haystack/django-haystack/blob/master/docs/changelog.rst
django-libsass: https://github.com/torchbox/django-libsass/blob/master/CHANGELOG.txt
django-method-override: https://gitlab.com/localmed/django-method-override/commits/master
django-model-utils: https://github.com/jazzband/django-model-utils/blob/master/CHANGES.rst
django-modelcluster: https://github.com/wagtail/django-modelcluster/blob/master/CHANGELOG.txt
django-mptt: https://github.com/django-mptt/django-mptt/blob/main/CHANGELOG.rst
django-multi-email-field: https://github.com/fle/django-multi-email-field/blob/master/CHANGES
django-mysql: https://django-mysql.readthedocs.io/en/latest/history.html
django-oauth-toolkit: https://github.com/jazzband/django-oauth-toolkit/blob/master/CHANGELOG.md
django-object-actions: https://github.com/crccheck/django-object-actions/blob/master/CHANGELOG.md
django-oscar: https://django-oscar.readthedocs.io/en/stable/releases/index.html
django-phonenumber-field: https://github.com/stefanfoulis/django-phonenumber-field/blob/master/CHANGELOG.rst
django-pipeline: https://github.com/jazzband/django-pipeline/blob/master/HISTORY.rst
django-pyfs: https://github.com/edx/django-pyfs/releases
django-ratelimit: https://github.com/jsocol/django-ratelimit/blob/main/CHANGELOG
django-ratelimit-backend: https://django-ratelimit-backend.readthedocs.io/en/latest/#changes
django-sekizai: https://github.com/divio/django-sekizai/blob/master/CHANGELOG.rst
django-ses: https://github.com/django-ses/django-ses/releases
django-simple-history: https://github.com/treyhunner/django-simple-history/blob/master/CHANGES.rst
django-soapbox: https://github.com/ubernostrum/django-soapbox/commits/master
django-splash: https://github.com/edx/django-splash/releases
django-statici18n: https://django-statici18n.readthedocs.io/en/latest/changelog.html
django-storages: https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst
django-tables2: https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md
django-taggit: https://django-taggit.readthedocs.io/en/latest/changelog.html
django-threadlocals: https://github.com/benrobster/django-threadlocals/commits/master
django-treebeard: https://github.com/django-treebeard/django-treebeard/blob/master/CHANGES.md
django-user-tasks: https://github.com/edx/django-user-tasks/blob/master/CHANGELOG.rst
django-waffle: https://github.com/django-waffle/django-waffle/blob/master/CHANGES
django-webtest: https://github.com/django-webtest/django-webtest/blob/master/CHANGES.rst
django-widget-tweaks: https://github.com/jazzband/django-widget-tweaks/blob/master/CHANGES.rst
django_compressor: https://django-compressor.readthedocs.io/en/stable/changelog/
djangorestframework: https://www.django-rest-framework.org/community/release-notes/
djangorestframework-csv: https://github.com/mjumbewu/django-rest-framework-csv#changelog
djangorestframework-xmll: https://github.com/jpadilla/django-rest-framework-xml/releases
docker-compose: https://github.com/docker/compose/releases (CHANGELOG.md is not kept up to date)
docutils: http://docutils.sourceforge.net/RELEASE-NOTES.html
drf-haystack: https://drf-haystack.readthedocs.io/en/latest/#changelog
drf-jwt: https://github.com/Styria-Digital/django-rest-framework-jwt/blob/master/CHANGELOG.md
edx-analytics-data-api-client: https://github.com/edx/edx-analytics-data-api-client/releases
edx-api-doc-tools: https://github.com/edx/api-doc-tools/blob/master/CHANGELOG.rst
edx-auth-backends: https://github.com/edx/auth-backends/blob/master/CHANGELOG.rst
edx-bulk-grades: https://pypi.org/project/edx-bulk-grades/
edx-ccx-keys: https://github.com/edx/ccx-keys/commits/master
edx-celeryutils: https://github.com/edx/edx-celeryutils/blob/master/CHANGELOG.rst
edx-completion: https://github.com/edx/completion/blob/master/CHANGELOG.rst
edx-django-release-util: https://github.com/edx/edx-django-release-util/releases
edx-django-sites-extensions: https://github.com/edx/edx-django-sites-extensions/releases
edx-django-utils: https://github.com/edx/edx-django-utils/blob/master/CHANGELOG.rst
edx-drf-extensions: https://github.com/edx/edx-drf-extensions/blob/master/CHANGELOG.rst
edx-enterprise: https://github.com/edx/edx-enterprise/blob/master/CHANGELOG.rst
edx-i18n-tools: https://github.com/edx/i18n-tools/releases
edx-lint: https://github.com/edx/edx-lint/releases
edx-milestones: https://github.com/edx/edx-milestones/releases
edx-opaque-keys: https://github.com/edx/opaque-keys/blob/master/CHANGELOG.rst
edx-organizations: https://github.com/edx/edx-organizations/releases
edx-proctoring: https://github.com/edx/edx-proctoring/releases
edx-rbac: https://github.com/edx/edx-rbac/blob/master/CHANGELOG.rst
edx-rest-api-client: https://github.com/edx/edx-rest-api-client/releases
edx-sphinx-theme: https://github.com/edx/edx-sphinx-theme/blob/master/CHANGELOG.rst
edx-submissions: https://github.com/edx/edx-submissions/releases
edx-when: https://github.com/edx/edx-when/releases
event-tracking: https://github.com/edx/event-tracking/releases
execnet: https://github.com/pytest-dev/execnet/blob/master/CHANGELOG.rst
exceptiongroup: https://github.com/agronholm/exceptiongroup/blob/main/CHANGES.rst
factory-boy: https://github.com/FactoryBoy/factory_boy/blob/master/docs/changelog.rst
faker: https://github.com/joke2k/faker/blob/master/CHANGELOG.md
fastavro: https://github.com/fastavro/fastavro/blob/master/ChangeLog
feedparser: https://github.com/kurtmckee/feedparser/blob/develop/NEWS
fixtures: https://github.com/testing-cabal/fixtures/blob/master/NEWS
flake8: https://flake8.pycqa.org/en/latest/release-notes/index.html
freezegun: https://github.com/spulec/freezegun/blob/master/CHANGELOG
fs: https://github.com/PyFilesystem/pyfilesystem2/blob/master/CHANGELOG.md
future: https://github.com/PythonCharmers/python-future/blob/master/docs/whatsnew.rst
futures: https://github.com/agronholm/pythonfutures/blob/master/CHANGES.rst
geoip2: https://github.com/maxmind/GeoIP2-python/blob/master/HISTORY.rst
GitPython: https://gitpython.readthedocs.io/en/stable/changes.html
glob2: https://github.com/miracle2k/python-glob2/blob/master/CHANGES
greenlet: https://greenlet.readthedocs.io/en/stable/changes.html
google-api-core: https://github.com/googleapis/python-api-core/blob/main/CHANGELOG.md
google-auth: https://github.com/googleapis/google-auth-library-python/blob/main/CHANGELOG.md
httplib2: https://github.com/httplib2/httplib2/blob/master/CHANGELOG
httpretty: https://github.com/gabrielfalcao/HTTPretty/blob/master/docs/source/changelog.rst
hypothesis: https://hypothesis.readthedocs.io/en/latest/changes.html
icalendar: https://github.com/collective/icalendar/blob/master/CHANGES.rst
imagesize: https://github.com/shibukawa/imagesize_py/commits/master
importlib-metadata: https://importlib-metadata.readthedocs.io/en/latest/history.html
importlib-resources: https://importlib-resources.readthedocs.io/en/latest/history.html
inflect: https://github.com/jazzband/inflect/blob/main/CHANGES.rst
inflection: https://github.com/jpvanhal/inflection/releases
iniconfig: https://github.com/pytest-dev/iniconfig/blob/main/CHANGELOG
ipaddress: https://github.com/phihag/ipaddress/commits/master
isort: https://github.com/timothycrosley/isort/blob/develop/CHANGELOG.md
jaraco-classes: https://github.com/jaraco/jaraco.classes/releases
jinja2: https://jinja.palletsprojects.com/en/latest/changes/
jmespath: https://github.com/jmespath/jmespath.py/blob/develop/CHANGELOG.rst
joblib: https://github.com/joblib/joblib/blob/master/CHANGES.rst
jsonfield2: https://github.com/rpkilby/jsonfield2/blob/archived/CHANGES.rst
jsonschema: https://github.com/Julian/jsonschema/blob/master/CHANGELOG.rst
keyring: https://github.com/jaraco/keyring/blob/main/CHANGES.rst
lazy: https://github.com/stefanholek/lazy/blob/master/CHANGES.rst
lazy-object-proxy: https://github.com/ionelmc/python-lazy-object-proxy/blob/master/CHANGELOG.rst
libvirt-python: https://gitlab.com/libvirt/libvirt-python/-/commits/master
livereload: https://github.com/lepture/python-livereload/blob/master/CHANGES.rst
logutils: https://logutils.readthedocs.io/en/latest/whatsnew.html#whats-new
mako: https://docs.makotemplates.org/en/latest/changelog.html
markupsafe: https://markupsafe.palletsprojects.com/en/2.1.x/changes/
maxminddb: https://github.com/maxmind/MaxMind-DB-Reader-python/blob/master/HISTORY.rst
mock: https://github.com/testing-cabal/mock/blob/master/CHANGELOG.rst
mongoengine: https://mongoengine-odm.readthedocs.io/changelog.html
more-itertools: https://github.com/erikrose/more-itertools/blob/master/docs/versions.rst
moto: https://github.com/spulec/moto/blob/master/CHANGELOG.md
multidict: https://github.com/aio-libs/multidict/blob/master/CHANGES.rst
mysqlclient: https://github.com/PyMySQL/mysqlclient-python/blob/master/HISTORY.rst
networkx: https://networkx.github.io/documentation/stable/news.html
newrelic: https://docs.newrelic.com/docs/release-notes/agent-release-notes/python-release-notes
numpy: https://github.com/numpy/numpy/tree/master/doc/changelog
openedx-calc: https://github.com/edx/openedx-calc/releases
ordered-set: https://github.com/LuminosoInsight/ordered-set/commits/master
packaging: https://packaging.pypa.io/en/latest/changelog.html
paramiko: https://www.paramiko.org/changelog.html
pathlib2: https://github.com/mcmtroffaes/pathlib2/blob/develop/CHANGELOG.rst
pbr: https://docs.openstack.org/pbr/latest/user/history.html
pdfminer.six: https://github.com/pdfminer/pdfminer.six/blob/develop/CHANGELOG.md
pexpect: https://pexpect.readthedocs.io/en/stable/history.html
pep517: https://github.com/pypa/pep517/blob/master/doc/changelog.rst
phonenumbers: https://github.com/google/libphonenumber/blob/master/release_notes.txt (until changelog is actually working, this is the best way to view release notes)
piexif: https://piexif.readthedocs.io/en/latest/changes.html
pillow: https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst
pinax-announcements: https://github.com/pinax/pinax-announcements/#change-log
pip-tools: https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md
platformdirs: https://github.com/platformdirs/platformdirs/releases
pluggy: https://pypi.org/project/pluggy/
pockets: https://github.com/RobRuana/pockets/blob/master/CHANGES
progressbar2: https://github.com/WoLpH/python-progressbar/releases
prompt-toolkit: https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG
psutil: https://github.com/giampaolo/psutil/blob/master/HISTORY.rst
pyasn1-modules: https://github.com/etingof/pyasn1-modules/blob/master/CHANGES.txt
pycodestyle: https://pycodestyle.pycqa.org/en/latest/developer.html#changes
pycountry: https://pypi.org/project/pycountry/
pycparser: https://github.com/eliben/pycparser/blob/master/CHANGES
pycryptdodomex: https://www.pycryptodome.org/en/latest/src/changelog.html
pydocstyle: https://github.com/PyCQA/pydocstyle/blob/master/docs/release_notes.rst
pyflakes: https://github.com/PyCQA/pyflakes/blob/master/NEWS.rst
pygments: http://pygments.org/docs/changelog/
pyjwkest: https://github.com/IdentityPython/pyjwkest/commits/master
pylint-django: https://github.com/PyCQA/pylint-django/blob/master/CHANGELOG.rst
pylint-plugin-utils: https://github.com/PyCQA/pylint-plugin-utils/commits/master
pymongo: https://github.com/mongodb/mongo-python-driver/releases
PyNaCl: https://github.com/pyca/pynacl/blob/master/CHANGELOG.rst
pyopenssl: https://www.pyopenssl.org/en/latest/changelog.html
pyproject-hooks: https://pyproject-hooks.readthedocs.io/en/latest/changelog.html
pyquery: https://github.com/gawel/pyquery/blob/master/CHANGES.rst
pyrsistent: https://github.com/tobgu/pyrsistent/blob/master/CHANGES.txt
pytest-aiohttp: https://github.com/aio-libs/pytest-aiohttp/blob/master/CHANGES.rst
pytest-cookies: https://github.com/hackebrot/pytest-cookies/releases
pytest-cov: https://pytest-cov.readthedocs.io/en/latest/changelog.html
pytest-django: https://pytest-django.readthedocs.io/en/latest/changelog.html
pytest-forked: https://github.com/pytest-dev/pytest-forked/blob/master/CHANGELOG
pytest-randomly: https://github.com/pytest-dev/pytest-randomly/blob/master/HISTORY.rst
pytest-xdist: https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst
python-crontab: https://gitlab.com/doctormo/python-crontab/-/commits/master
python-dotenv: https://github.com/theskumar/python-dotenv/blob/master/CHANGELOG.md
python-memcached: https://github.com/linsomniac/python-memcached/releases
python-swiftclient: https://docs.openstack.org/releasenotes/python-swiftclient/
python-dateutil: https://dateutil.readthedocs.io/en/stable/changelog.html
python-slugify: https://github.com/un33k/python-slugify/blob/master/CHANGELOG.md
python3-saml: https://github.com/onelogin/python3-saml/blob/master/changelog.md
pywatchman: https://github.com/facebook/watchman/releases
readme-renderer: https://github.com/pypa/readme_renderer/blob/master/CHANGES.rst
recommender-xblock: https://github.com/edx/RecommenderXBlock/releases
reportlab: https://hg.reportlab.com/hg-public/reportlab/file/tip/CHANGES.md
requests: https://requests.readthedocs.io/en/master/community/updates/#release-history
requests-toolbelt: https://github.com/requests/toolbelt/blob/master/HISTORY.rst
responses: https://github.com/getsentry/responses/blob/master/CHANGES
restructuredtext-lint: https://github.com/twolfson/restructuredtext-lint/blob/master/CHANGELOG.rst
rfc6266-parser: https://github.com/SWW13/python-rfc6266-parser/commits/master
ruamel.yaml: https://pypi.org/project/ruamel.yaml/
rules: https://github.com/dfunckt/django-rules/blob/master/CHANGELOG.md
s3transfer: https://github.com/boto/s3transfer/blob/develop/CHANGELOG.rst
semantic-version: https://python-semanticversion.readthedocs.io/en/latest/changelog.html
setuptools: https://setuptools.pypa.io/en/latest/history.html
shapely: https://shapely.readthedocs.io/en/latest/project.html#changes
shortuuid: https://github.com/skorokithakis/shortuuid/blob/master/CHANGELOG.md
simple-salesforce: https://github.com/simple-salesforce/simple-salesforce/releases
simplejson: https://github.com/simplejson/simplejson/blob/master/CHANGES.txt
snowballstemmer: https://github.com/snowballstem/snowball/blob/master/NEWS
social-auth-app-django: https://github.com/python-social-auth/social-app-django/blob/master/CHANGELOG.md
social-auth-core: https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
sorl-thumbnail: https://github.com/jazzband/sorl-thumbnail/blob/master/CHANGES.rst
sortedcontainers: https://github.com/grantjenks/python-sortedcontainers/blob/master/HISTORY.rst
soupsieve: https://facelessuser.github.io/soupsieve/about/changelog/
sphinxcontrib-websupport: https://github.com/sphinx-doc/sphinxcontrib-websupport/blob/master/CHANGES
sqlparse: https://sqlparse.readthedocs.io/en/latest/changes/#changelog
staff-graded-xblock: https://github.com/edx/staff_graded-xblock/releases
stevedore: https://github.com/openstack/stevedore/tags
stripe: https://github.com/stripe/stripe-python/blob/master/CHANGELOG.md
super-csv: https://github.com/edx/super-csv/blob/master/CHANGELOG.rst
sure: https://github.com/gabrielfalcao/sure/blob/master/CHANGELOG.md
testfixtures: https://testfixtures.readthedocs.io/en/latest/changes.html
text-unidecode: https://github.com/kmike/text-unidecode/releases
tomli: https://github.com/hukkin/tomli/blob/master/CHANGELOG.md
tox-battery: https://github.com/signalpillar/tox-battery/commits/master
transifex-client: https://github.com/transifex/transifex-client/releases
twine: https://twine.readthedocs.io/en/latest/changsphinxelog.html
typed-ast: https://github.com/python/typed_ast/commits/master
typing-extensions: https://github.com/python/typing_extensions/blob/main/CHANGELOG.md
unidecode: https://github.com/avian2/unidecode/blob/master/ChangeLog
unidiff: https://github.com/matiasb/python-unidiff/blob/master/HISTORY
uritemplate: https://github.com/python-hyper/uritemplate/blob/master/HISTORY.rst
urllib3: https://github.com/urllib3/urllib3/blob/main/CHANGES.rst
vertica-python: https://github.com/vertica/vertica-python/releases
virtualenv: https://virtualenv.pypa.io/en/latest/changelog.html
voluptuous: https://github.com/alecthomas/voluptuous/blob/master/CHANGELOG.md
vulture: https://github.com/jendrikseipp/vulture/blob/master/CHANGELOG.md
wagtail: https://github.com/wagtail/wagtail/blob/master/CHANGELOG.txt
watchdog: https://github.com/gorakhargosh/watchdog/blob/master/changelog.rst
WebOb: https://docs.pylonsproject.org/projects/webob/en/stable/changes.html
websocket-client: https://github.com/websocket-client/websocket-client/blob/master/ChangeLog
Werkzeug: https://werkzeug.palletsprojects.com/en/master/changes/
wheel: https://github.com/pypa/wheel/blob/master/docs/news.rst
willow: https://willow.readthedocs.io/en/latest/changelog.html
XBlock: https://github.com/openedx/XBlock/blob/master/CHANGELOG.rst
xss-utils: https://github.com/edx/xss-utils/releases
zope-interface: https://github.com/zopefoundation/zope.interface/blob/master/CHANGES.rst