If you’re familiar with Python packaging and installation, and just want to know what tools are currently recommended, then here it is.
Application dependency management¶
pipenv does not meet your use case, consider other tools like:
Installation tool recommendations¶
If you’re looking for management of fully integrated cross-platform software stacks, consider:
Packaging tool recommendations¶
If you have binary extensions and want to distribute wheels for multiple platforms, use cibuildwheel as part of your CI setup to build distributable wheels.
Publishing platform migration¶
See Migrating to PyPI.org for more information on the status of the migration, and what settings to change in your clients.
There are some cases where you might choose to use
easy_install(from setuptools), e.g. if you need to install from Eggs (which pip doesn’t support). For a detailed breakdown, see pip vs easy_install.
get-pip.py and virtualenv install wheel, whereas ensurepip and venv do not currently. Also, the common “python-pip” package that’s found in various linux distros, does not depend on “python-wheel” currently.
Beginning with Python 3.4,
venvwill create virtualenv environments with
pipinstalled, thereby making it an equal alternative to virtualenv. However, using virtualenv will still be recommended for users that need cross-version consistency.
Although you can use pure
distutilsfor many projects, it does not support defining dependencies on other projects and is missing several convenience utilities for automatically populating distribution metadata correctly that are provided by
setuptools. Being outside the standard library,
setuptoolsalso offers a more consistent feature set across different versions of Python, and (unlike
distutils), recent versions of
setuptoolssupport all of the modern metadata fields described in Core metadata specifications.
Even for projects that do choose to use
distutils, when pip installs such projects directly from source (rather than installing from a prebuilt wheel file), it will actually build your project using setuptools instead.