Fedora already tracks CPython closely, and current Fedora releases expose far more than a single default interpreter. If you need to install Python on Fedora, the safer path is to stay inside DNF, pick the packaged version you actually need, and switch between interpreters with explicit binaries or versioned virtual environments instead of replacing the system default.
Fedora 44 and Fedora 43 use the Python 3.14 branch for python3, and Fedora’s repositories also carry versioned builds for Python 3.13, 3.12, 3.11, 3.10, plus a Python 3.15 alpha preview. That packaged matrix is enough for most hosts, so the practical job is choosing the right repo package, switching safely, handling pip with versioned environments, and cleaning up versions you no longer need.
Install Python on Fedora
Fedora Workstation often already has Python 3 ready, while Server or minimal installs usually need a package install first. Fedora’s repositories cover the current system interpreter, several older stable branches, and a 3.15 alpha preview, so manual source builds are unnecessary for most readers.
| Package | Binary | Fedora Track | Use It When | Notes |
|---|---|---|---|---|
| python3 | python3 | 3.14.x | You want Fedora’s default interpreter | Safest choice for general system and project work |
| python3.13 | python3.13 | 3.13.x | You need a recent stable branch alongside Fedora’s default | Parallel repo package, does not replace python3 |
| python3.12 | python3.12 | 3.12.x | You need older but still current project compatibility | Parallel repo package, works well with versioned virtual environments |
| python3.11 | python3.11 | 3.11.x | You support more conservative application stacks | Parallel repo package, explicit binary name |
| python3.10 | python3.10 | 3.10.x | You need legacy compatibility from Fedora’s repos | Parallel repo package, explicit binary name |
| python3.15 | python3.15 | 3.15.0 alpha | You want to test the next upstream branch | Preview only, not a production recommendation |
Start with python3 unless an application, CI job, or compatibility target explicitly needs another branch. Treat python3.15 as a preview package for testing, not as the default Python you hand to production workloads.
Use Fedora’s Python 3 packages for new environments. Current Fedora repositories do not provide normal python2 or python2-pip install targets, so update old project instructions to Python 3 before building new environments.
- Use
python3for normal Fedora development and system-adjacent work. - Use
python3.13orpython3.12when a project needs a recent stable branch that differs from Fedora’s default. - Use
python3.11orpython3.10only for compatibility with older application stacks. - Use
python3.15only for preview testing and early compatibility work.
Check whether Fedora already has Python installed
Fedora Workstation frequently has the default interpreter ready before you install anything. Check python3 first so you know whether you need a package install or just version-specific add-ons.
python3 --version
Python 3.14.4
DNF updates can move the patch release inside each Python branch, so match the major and minor branch rather than expecting the exact patch number in every output. Example outputs were captured on Fedora 44; Fedora 43 uses the same package roles and branch names, but exact patch levels, pip versions, and fcNN package release suffixes can differ.
If that command already prints a version you can use, move to optional add-ons or alternate versions. If the shell says python3: command not found, continue with the package install step.
Update Fedora before installing Python
Refresh package metadata before adding or upgrading interpreters so DNF pulls the current Fedora package set and dependency chain.
sudo dnf upgrade --refresh
These commands use
sudofor tasks that need root privileges. If your account does not have sudo access yet, follow the guide on how to add a user to sudoers on Fedora before continuing.
If you want more package-selection flags after the base install works, the DNF install examples on Fedora reference is useful background.
Install Fedora’s default Python package
The default repository path installs Fedora’s current system interpreter and keeps future updates inside the normal DNF workflow.
sudo dnf install python3
Verify that the default interpreter is available:
python3 --version
Python 3.14.4
Fedora’s default command is python3. The shorter python launcher comes from a separate optional package, which is why some hosts have it and others do not.
Install optional add-ons for Fedora’s default Python
Fedora splits several common extras into separate packages, so install only the pieces that match your workload.
python3-pipadds a system-levelpython3 -m pipcommand for Fedora’s default interpreter.python3-develis Fedora’s equivalent of Ubuntu’spython3-dev; it adds headers and build files for native C extensions and embedded Python work.python-unversioned-commandadds/usr/bin/pythonif you want the unversioned launcher.
Do not assume python3-devel is present by default. Fedora keeps it separate from python3, and Toolbox containers use their own RPM database, so run the package check inside the toolbox before building extensions there.
rpm -q python3-devel
package python3-devel is not installed
sudo dnf install python3-pip python3-devel python-unversioned-command
If you installed the pip and unversioned-command packages, verify both:
python --version
python3 -m pip --version
Python 3.14.4 pip 26.0.1 from /usr/lib/python3.14/site-packages/pip (python 3.14)
Fedora does not ship versioned python3.x-pip packages for the alternate interpreters, so create a version-specific virtual environment when you want pip with Python 3.13, 3.12, 3.11, 3.10, or 3.15.
The optional python launcher from python-unversioned-command still targets Fedora’s default Python branch. Installing python3.13 or python3.12 does not make python switch versions automatically.
Install popular Python add-on packages on Fedora
Fedora also packages several common Python add-ons that are worth knowing about when you need GUI tooling, debugging support, or a free-threaded runtime.
| Need | Default Branch Package | Versioned Example | What It Adds |
|---|---|---|---|
| Tkinter GUI support | python3-tkinter | python3.13-tkinter | Python’s Tk GUI toolkit |
| IDLE desktop editor | python3-idle | python3.13-idle | The bundled Python editor and shell |
| Debug runtime | python3-debug | Versioned debug builds vary by branch | A slower runtime with extra debugging hooks |
| Free-threaded runtime | python3.14-freethreading | python3.13-freethreading or python3.15-freethreading | A preview runtime built without the GIL |
Install only the packages you actually plan to use. Tkinter and IDLE install fine from a terminal or on a Server/minimal system, but they still need a graphical session to launch.
sudo dnf install python3-tkinter python3-idle python3-debug python3.14-freethreading
sudo dnf install python3.13-idle python3.13-freethreading
Verify the package install and the free-threaded binaries:
rpm -q python3-tkinter python3-idle python3-debug python3.14-freethreading python3.13-idle python3.13-freethreading
python3.14t --version
python3.13t --version
python3-tkinter-3.14.4-2.fc44.x86_64 python3-idle-3.14.4-2.fc44.x86_64 python3-debug-3.14.4-2.fc44.x86_64 python3.14-freethreading-3.14.4-2.fc44.x86_64 python3.13-idle-3.13.13-1.fc44.x86_64 python3.13-freethreading-3.13.13-1.fc44.x86_64 Python 3.14.4 Python 3.13.13
Install alternate Python versions from Fedora’s repositories
Fedora’s repositories carry several versioned interpreters in parallel. Install only the branches you actually need, plus the matching -devel package when your project compiles native extensions.
sudo dnf install python3.13 python3.13-devel
sudo dnf install python3.12 python3.12-devel
sudo dnf install python3.11 python3.11-devel
sudo dnf install python3.10 python3.10-devel
Check the explicit versioned binaries after the install completes:
python3.13 --version
python3.12 --version
python3.11 --version
python3.10 --version
Python 3.13.13 Python 3.12.13 Python 3.11.15 Python 3.10.20
Install the Python 3.15 preview from Fedora’s repositories
Fedora also packages a Python 3.15 alpha build. Treat it as a testing interpreter for early compatibility work, not as a drop-in replacement for your default Python branch.
python3.15is currently a pre-release package on Fedora. Use it for CI, porting work, or early validation against the upcoming branch, not for production deployments that need a stable runtime.
sudo dnf install python3.15 python3.15-devel
python3.15 --version
Python 3.15.0a8
Switch between packaged Python versions on Fedora
Fedora’s safe switching model is simple: leave the system default alone, call the interpreter you want explicitly, and use version-specific virtual environments when a project should see python instead of python3.x.
Fedora does not use alternatives for Python
Fedora does not register Python through the alternatives system, which is a good thing for a system-critical runtime.
alternatives --display python3 2>/dev/null || echo "no python3 alternatives"
alternatives --display python 2>/dev/null || echo "no python alternatives"
no python3 alternatives no python alternatives
Do not try to repoint /usr/bin/python3 with alternatives or custom symlinks. Fedora’s desktop and system packages expect that interpreter to remain the distro-managed default.
Do not replace Fedora’s default Python interpreter
Do not alias
python3to another branch in your shell startup files, replace/usr/bin/python3with a custom symlink, or add a wrapper script that shadows Fedora’s default interpreter. GNOME Shell and other Fedora system packages depend on the distro-managed Python branch and can break if you silently swap it out.
If a project needs Python 3.12 or 3.13, call that interpreter directly or activate a matching virtual environment. That keeps the system runtime and your project runtime separate.
Use pip safely with packaged Python on Fedora
The default Fedora interpreter can use python3-pip outside a virtual environment, but that does not make system-wide pip installs a good idea. For project packages, virtual environments are still the safer default.
Using
sudo python3 -m pip install ...against Fedora’s packaged interpreter can overwrite files that RPM-managed packages expect. Usepython3 -m venvorpython3.x -m venvfor project dependencies instead of installing them into the system interpreter.
python3 -m pip --version
python3.13 -m pip --version 2>&1
pip 26.0.1 from /usr/lib/python3.14/site-packages/pip (python 3.14) /usr/bin/python3.13: No module named pip
If you still force pip to run as root against Fedora’s packaged default interpreter, pip prints a warning about broken permissions and conflicts with RPM-managed packages. Take that warning literally and move the work into a virtual environment instead.
For the default python3 interpreter, python3-pip gives you pip outside a virtual environment. For versioned interpreters such as python3.13 and python3.12, Fedora’s practical pip path is a version-specific venv.
Check which packaged Python versions are installed on Fedora
This loop prints only the interpreters that are actually installed, so you can check the current version matrix without guessing which packages are present.
for bin in python3 python3.13 python3.12 python3.11 python3.10 python3.15; do
command -v "$bin" >/dev/null && "$bin" --version
done
Python 3.14.4 Python 3.13.13 Python 3.12.13 Python 3.11.15 Python 3.10.20 Python 3.15.0a8
Create version-specific virtual environments on Fedora
The safest way to “switch” Python versions for real project work is to create a virtual environment from the interpreter you want, then activate that environment when you need it.
mkdir -p ~/venvs
python3.13 -m venv ~/venvs/py313
python3.12 -m venv ~/venvs/py312
source ~/venvs/py313/bin/activate
python --version
python -m pip --version
deactivate
source ~/venvs/py312/bin/activate
python --version
python -m pip --version
deactivate
Python 3.13.13 pip 26.0.1 from /home/joshua/venvs/py313/lib64/python3.13/site-packages/pip (python 3.13) Python 3.12.13 pip 26.0.1 from /home/joshua/venvs/py312/lib64/python3.12/site-packages/pip (python 3.12)
The same pattern works with python3.11, python3.10, and the python3.15 preview. Activating the matching environment gives your shell a clean python and pip for that exact interpreter without touching Fedora’s default Python branch.
Update Python on Fedora
Repo-packaged Python versions do not need a separate update script or alternatives step. DNF handles the default interpreter and every installed versioned package together.
Update all installed Python packages on Fedora
Refresh the metadata and let DNF upgrade every Python package you currently have installed.
sudo dnf upgrade --refresh
Check the installed interpreters after the upgrade finishes:
for bin in python3 python3.13 python3.12 python3.11 python3.10 python3.15; do
command -v "$bin" >/dev/null && "$bin" --version
done
Python 3.14.4 Python 3.13.13 Python 3.12.13 Python 3.11.15 Python 3.10.20 Python 3.15.0a8
That is the main update path for Fedora’s packaged interpreters. There is no version-specific helper script to maintain because DNF already owns the installed branches.
Troubleshoot Python on Fedora
The most common Python packaging problems on Fedora are missing pip for the default interpreter, expecting versioned python3.x-pip packages that Fedora does not publish, and trying to treat an alternate interpreter as a system-wide replacement.
Fix “No module named pip” on Fedora
If python3 -m pip fails before you install python3-pip, Fedora is still using the base interpreter without the separate pip package.
/usr/bin/python3: No module named pip
Install Fedora’s pip package, then verify again:
sudo dnf install python3-pip
python3 -m pip --version
pip 26.0.1 from /usr/lib/python3.14/site-packages/pip (python 3.14)
Fix “No matching packages to list” for versioned pip packages on Fedora
Fedora does not publish versioned pip packages such as python3.12-pip, so DNF returns an empty match when you ask for one directly.
Updating and loading repositories: Repositories loaded. No matching packages to list
Use a versioned virtual environment instead. That gives you pip for the interpreter you actually want without looking for a nonexistent repo package.
python3.12 -m venv /tmp/py312-venv
source /tmp/py312-venv/bin/activate
python -m pip --version
deactivate
rm -rf /tmp/py312-venv
pip 26.0.1 from /tmp/py312-venv/lib64/python3.12/site-packages/pip (python 3.12)
Fix problems caused by replacing Fedora’s default Python
If commands or desktop components start failing after you changed python3 globally, undo that change first. Fedora expects its own packaged interpreter at /usr/bin/python3.
command -v python3
python3 --version
rpm -q --whatprovides /usr/bin/python3
/usr/bin/python3 Python 3.14.4 python3-3.14.4-2.fc44.x86_64
If command -v python3 points anywhere other than /usr/bin/python3, remove the alias, wrapper, or custom symlink that is shadowing Fedora’s interpreter. Then use explicit versioned binaries such as python3.12 or a matching virtual environment instead.
Remove Python on Fedora
On Fedora Workstation, removal usually means cleaning up optional add-ons, alternate repo interpreters, or project virtual environments. Fedora’s default python3 interpreter should stay installed.
A
dnf remove --assumeno python3probe on Fedora 44 Workstation failed becausegnome-shellrequires/usr/bin/python3. Leave Fedora’s packaged default interpreter in place and remove only the optional pieces you added yourself.
Remove optional add-ons for Fedora’s default Python
If you no longer need system pip, development headers, or the unversioned launcher, remove those add-ons without touching Fedora’s core interpreter.
sudo dnf remove python3-pip python3-devel python-unversioned-command
rpm -q python3-pip python3-devel python-unversioned-command
package python3-pip is not installed package python3-devel is not installed package python-unversioned-command is not installed
Remove an alternate Python version from Fedora’s repositories
Use the same package pattern for any alternate interpreter branch you installed. This example removes Python 3.13 and its development package; swap the version number for 3.12, 3.11, 3.10, or 3.15 if needed.
sudo dnf remove python3.13 python3.13-devel
rpm -q python3.13 python3.13-devel
package python3.13 is not installed package python3.13-devel is not installed
Remove version-specific virtual environments on Fedora
Delete the environments you created for version switching when they are no longer useful.
Removing these directories permanently deletes the packages installed inside those virtual environments and any files saved there. Move project files or requirement exports somewhere else before running the cleanup command.
rm -rf ~/venvs/py313 ~/venvs/py312
Conclusion
Fedora is ready for Python work once the needed interpreter branch and optional packages are installed through DNF. Keep the system python3 on Fedora’s default branch, use versioned binaries or venvs per project, and add developer tools next with Install Git on Fedora for version control or Install Visual Studio Code on Fedora for a full editor.


Formatting tips for your comment
You can use basic HTML to format your comment. Useful tags currently allowed in published comments:
<code>command</code>command<strong>bold</strong><em>italic</em><blockquote>quote</blockquote>