Types of Packages
Egg vs Wheel vs Neither. What's meant by neither is that a python package can be installed from its "source" without being packaged as an egg or wheel.

Packaging Utilities
There are several libraries which provide utilities for packaging python applications, including distutils and setuptools. There is already an excellent post on this.

easy_install
Part of setuptools, allows building and installing python packages. Often discouraged in favor of Pip. Designed to make installation of packages easy, doing the chore of downloading and moving them to the correct place for you (hence the name).

Pip
A package manager for python packages, and a replacement for easy_install! See here for some reasons why people prefer it over easy_install. Can do neat things like install a package directly from a git repository or compile C extensions on the target machine. The latter is debatable as to whether or not it's desirable, but nonetheless it's a nice feature to have if you want it.

PyPI
The python package index, where easy_install and Pip search for available packages, by default. Basically a giant online repository of modules that are accepted by the community.

virtualenv
A way of hacking your environment variables to "isolate" an installation of python and it's related modules. Prefers Pip, because Ian Bicking wrote them both. Basically, you use pip to install virtualenv system wide, which then allows you to create python virtual environments, each with their own copy of python, pip, and assorted modules. This lets you have multiple versions of python or install a module just for testing, without mucking up your system-wide python install.

virtualenvwrapper
A really handy shell script that makes creating and tearing down virtual environments easier.

site-packages
One of the supported locations for installing python modules into. Lives someplace like /usr/lib/pythonX.X/site-packages. There are other supported locations, like dist-packages or user specific locations.

What does all this mean for you?
I'd recommend you don't pay any attention to easy_install and just use pip. Please also always use virtualenv. Usually, the only python modules you should install system-wide on your workstation are pip and virtualenv. I've completely ignored eggs and wheels, but if you plan to distribute packages professionally or host them on PyPI, you probably want to investigate those. Also, if you are creating python packages, you will need to learn to write a setup script, with setuptools. My recommendation is to never use distutils.

Some more Reading
A page on python.org about packaging which covers a lot of these topics
Python packaging is a nightmare
A great post that goes against the most common recommendations, including mine!

Answer from ErlVolton on Stack Overflow
๐ŸŒ
Jumping Rivers
jumpingrivers.com โ€บ blog posts โ€บ python package managers
An Introduction to Python Package Managers
July 22, 2025 - Managing these packages can be a challenging task without the correct tools. Thatโ€™s where Python package managers come in. In this blog post we will explore what a package manager is and why they are important. We will then cover some popular examples, including how to use them, how to install ...
๐ŸŒ
MLJAR
mljar.com โ€บ glossary โ€บ python-package-manager
What is Python Package Manager?
pip is the most widely used package manager for Python. Here are some basic commands and how they are used: ... This command installs the specified package from PyPI. For example:
Discussions

pip - How to do Python package management? - Stack Overflow
Coming from a Node.js + npm background, ... the things related to Python package management. After a few hours of research, I've stumbled upon all those keywords: ... Can someone help me decipher those terms and put them in historical context? For example, "distutils was the first ... More on stackoverflow.com
๐ŸŒ stackoverflow.com
What's the best package manager for python in your opinion?
uv and it isn't even close More on reddit.com
๐ŸŒ r/Python
220
110
October 22, 2025
2024 Python package manager overview - Packaging - Discussions on Python.org
A colleague of mine (does not seem to have a handle here) pointed out the following article, which I think is a pretty nice โ€“ even if opinionated โ€“ high-level overview over the current state of affairs in python packaging land (at least from the POV of user-facing tools): The one nitpick ... More on discuss.python.org
๐ŸŒ discuss.python.org
5
July 9, 2024
Which package manager do you use?
Python 3.10 is very new and so not all libraries work with it yet. This isnโ€™t a package manager difficulty, itโ€™s a compatibility conflict between libraries and Python versions. This is why Conda is installing 3.9. Wait a bit and more libraries will support 3.10. I just use pip to install to venvs. Edit: Scikit-learn specifically is not 3.10 yet. More on reddit.com
๐ŸŒ r/Python
10
3
November 24, 2021
๐ŸŒ
DEV Community
dev.to โ€บ adamghill โ€บ python-package-manager-comparison-1g98
Python Package Manager Comparison ๐Ÿ“ฆ - DEV Community
November 15, 2023 - For example, poetry run dev as an alias for poetry run manage.py runserver 0:8000. That is not available in standard Poetry, although I use poethepoet (a Poetry plugin) to provide that functionality. Hatch never deviates from the Python PEP standards and brings a few innovative features to the table, including being able to group dependencies and scripts into custom environments.
๐ŸŒ
KDnuggets
kdnuggets.com โ€บ top-7-python-package-managers
Top 7 Python Package Managers - KDnuggets
October 27, 2025 - Mamba is a fast, drop-in replacement for Conda, written in C++. It dramatically speeds up dependency solving and environment creation, making it a favorite among data scientists who work with large environments. It has largely replaced Miniconda as the go-to tool for a fast and robust Python package manager, particularly for machine learning and data science workflows.
๐ŸŒ
Opensource.com
opensource.com โ€บ article โ€บ 19 โ€บ 4 โ€บ managing-python-packages
Managing Python packages the right way | Opensource.com
However, there are some tools and methods that can be considered best practices. Knowing these can help you pick the right tool for the right situation. pip is the de facto package manager in the Python world.
๐ŸŒ
Inedo
blog.inedo.com โ€บ python โ€บ managing-python-packages
Python Package Managers Explained
May 1, 2025 - For example, one environment for web development and a different environment for data science can be created with their own set of libraries. Pip is the โ€œoriginalโ€ Python package manager that others have attempted to improve upon.
Top answer
1 of 3
22

Types of Packages
Egg vs Wheel vs Neither. What's meant by neither is that a python package can be installed from its "source" without being packaged as an egg or wheel.

Packaging Utilities
There are several libraries which provide utilities for packaging python applications, including distutils and setuptools. There is already an excellent post on this.

easy_install
Part of setuptools, allows building and installing python packages. Often discouraged in favor of Pip. Designed to make installation of packages easy, doing the chore of downloading and moving them to the correct place for you (hence the name).

Pip
A package manager for python packages, and a replacement for easy_install! See here for some reasons why people prefer it over easy_install. Can do neat things like install a package directly from a git repository or compile C extensions on the target machine. The latter is debatable as to whether or not it's desirable, but nonetheless it's a nice feature to have if you want it.

PyPI
The python package index, where easy_install and Pip search for available packages, by default. Basically a giant online repository of modules that are accepted by the community.

virtualenv
A way of hacking your environment variables to "isolate" an installation of python and it's related modules. Prefers Pip, because Ian Bicking wrote them both. Basically, you use pip to install virtualenv system wide, which then allows you to create python virtual environments, each with their own copy of python, pip, and assorted modules. This lets you have multiple versions of python or install a module just for testing, without mucking up your system-wide python install.

virtualenvwrapper
A really handy shell script that makes creating and tearing down virtual environments easier.

site-packages
One of the supported locations for installing python modules into. Lives someplace like /usr/lib/pythonX.X/site-packages. There are other supported locations, like dist-packages or user specific locations.

What does all this mean for you?
I'd recommend you don't pay any attention to easy_install and just use pip. Please also always use virtualenv. Usually, the only python modules you should install system-wide on your workstation are pip and virtualenv. I've completely ignored eggs and wheels, but if you plan to distribute packages professionally or host them on PyPI, you probably want to investigate those. Also, if you are creating python packages, you will need to learn to write a setup script, with setuptools. My recommendation is to never use distutils.

Some more Reading
A page on python.org about packaging which covers a lot of these topics
Python packaging is a nightmare
A great post that goes against the most common recommendations, including mine!

2 of 3
3

There's some mixing in the options you are listing:

  • virtualenv - is used to create isolated environments
  • site-packages - standard location where python packages / libs reside

  • pypi - is a repository

  • easy_install - is found on the setuptools package

  • pip - was written to improve easy_install.

about python eggs

Find elsewhere
๐ŸŒ
Python Packaging
packaging.python.org โ€บ tutorials โ€บ packaging-projects
Packaging Python Projects โ€” Python Packaging User Guide
Change the name to include your username; this ensures that you have a unique package name and that your package doesnโ€™t conflict with packages uploaded by other people following this tutorial. [metadata] name = example-pkg-YOUR-USERNAME-HERE version = 0.0.1 author = Example Author author_email = author@example.com description = A small example package long_description = file: README.md long_description_content_type = text/markdown url = https://github.com/pypa/sampleproject project_urls = Bug Tracker = https://github.com/pypa/sampleproject/issues classifiers = Programming Language :: Python :: 3 License :: OSI Approved :: MIT License Operating System :: OS Independent [options] package_dir = = src packages = find: python_requires = >=3.6 [options.packages.find] where = src
๐ŸŒ
W3Schools
w3schools.com โ€บ python โ€บ python_pip.asp
Python PIP
Navigate your command line to the location of Python's script directory, and type the following: ... If you do not have PIP installed, you can download and install it from this page: https://pypi.org/project/pip/ Downloading a package is very easy.
๐ŸŒ
Python Packaging
packaging.python.org โ€บ guides โ€บ tool-recommendations
Tool recommendations โ€” Python Packaging User Guide
See Managing Application Dependencies for more details on using pipenv. When pipenv does not meet your use case, consider other tools like: ... Use pip to install Python packages from PyPI. 1 2 Depending on how pip is installed, you may need to also install wheel to get the benefit of wheel caching.
๐ŸŒ
Wikibooks
en.wikibooks.org โ€บ wiki โ€บ Python_Programming โ€บ Package_management
Python Programming/Package management - Wikibooks, open books for an open world
Useful e.g. for installing packages for PyPy (a just-in-time compiler for Python), in which case you use pypy -m pip install xlrd.
๐ŸŒ
PyPI
pypi.org
PyPI ยท The Python Package Index
Package authors use PyPI to distribute their software. Learn how to package your Python code for PyPI.
๐ŸŒ
Python.org
discuss.python.org โ€บ packaging
2024 Python package manager overview - Packaging - Discussions on Python.org
July 9, 2024 - A colleague of mine (does not seem to have a handle here) pointed out the following article, which I think is a pretty nice โ€“ even if opinionated โ€“ high-level overview over the current state of affairs in python packaging land (at least from the POV of user-facing tools): The one nitpick I have is that Iโ€™d wish the article underscored a bit more is how pixi is explicitly trying to bridge the gap between the world of PyPI-based packages and conda packages, which is (in my biased opinion) one o...
๐ŸŒ
Medium
medium.com โ€บ @maw1a โ€บ writing-a-package-manager-for-python-a1acf6698a11
Writing a package manager for Python | by Ahmed Mawia | Medium
October 31, 2024 - While researching for package management solutions I came across a bunch of pre-existing solutions. Things like venv, pipenv and Poetry were already tackling problems like dependency management faced by Python devs. Poetry seems like the best solution out of all of these and something I would recommend if youโ€™re starting a new project.
๐ŸŒ
The New Stack
thenewstack.io โ€บ home โ€บ how to choose the best python package management tool
How To Choose the Best Python Package Management Tool - The New Stack
June 16, 2025 - Basic operations follow intuitive command patterns: pip install package-name for installation, pip uninstall package-name for removal, and pip list for viewing installed packages.
๐ŸŒ
Reddit
reddit.com โ€บ r/python โ€บ which package manager do you use?
r/Python on Reddit: Which package manager do you use?
November 24, 2021 -

there are 3 popular package managers for python modules being used the most frequently: conda pip apt(for debian-based linux).

I initially installed anaconda which gave me conda but together with a lot of extra package bloat I may never use.

So naturally I tried miniconda. It turns out there are caveats to this too:

conda-forge is touted as a robust channel but when i tried installing all my most used packages from the conda-forge channel here is what I got:

  • python 3.10 as of writing

  • pandas 1.3.4 (latest)

  • scikit-learn (latest)

  • jupyterlab (no problem)

  • matplotlib (CANNOT INSTALL. dependency conflict with python version on conda-forge)

  • requests (CANNOT INSTALL. dependency conflict with python version on conda-forge)

I tried conda package manager with the defaults channel:

  • all the packages install but python from defaults channel is 3.9.7. Everything works with this but no python==3.10.

When I made a separate virtual environment and tried installing via pip package manager only:

  • everything worked. python --version is 3.10. every package installed to the latest version EXCEPT scikit-learnwhich is not installing for some reason.

And then there's apt which manages all other non-python packages on my linux and has a few python packages on ubuntu's repositories. But apt does not install packages in virtual environment and may not contain as many packages as pip or conda.

it appears conda with defaults channel is the most robust of all. I don't want to use multiple package managers as it is a hassle when updating and may lead to dependency hell. I want to know which package managers are being used the most considering they are hassle-free and easy to update and keep track of.

So what package manager do you use?

๐ŸŒ
Posit
docs.posit.co โ€บ connect โ€บ admin โ€บ python โ€บ package-management
Python Package Management โ€“ Posit Connect Documentation Version 2026.03.0
If you have a Python package repository ... via uv. For example, to configure a package repository used by default, add the following to uv.toml: ... Posit Package Manager can serve as a Python package repository by mirroring PyPI....
๐ŸŒ
Medium
medium.com โ€บ @digitalpower โ€บ comparing-the-best-python-project-managers-46061072bc3f
Comparing the best Python project managers | by Digital Power | Medium
October 22, 2024 - Package management: This evolves around installing, updating and uninstalling (external) Python packages. Using packages avoids reinventing the wheel and provides the liberty to use an arsenal of utility functions that have been used and tested by other developers. Example tools: pip, conda