How to Install Python on Fedora 44

Install Python on Fedora 44 Linux with DNF. Covers switching, packaged interpreters, virtual environments, pip safety, and cleanup tips.

Last updatedAuthorJoshua JamesRead time8 minGuide typeFedora

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.

PackageBinaryFedora TrackUse It WhenNotes
python3python33.14.xYou want Fedora’s default interpreterSafest choice for general system and project work
python3.13python3.133.13.xYou need a recent stable branch alongside Fedora’s defaultParallel repo package, does not replace python3
python3.12python3.123.12.xYou need older but still current project compatibilityParallel repo package, works well with versioned virtual environments
python3.11python3.113.11.xYou support more conservative application stacksParallel repo package, explicit binary name
python3.10python3.103.10.xYou need legacy compatibility from Fedora’s reposParallel repo package, explicit binary name
python3.15python3.153.15.0 alphaYou want to test the next upstream branchPreview 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 python3 for normal Fedora development and system-adjacent work.
  • Use python3.13 or python3.12 when a project needs a recent stable branch that differs from Fedora’s default.
  • Use python3.11 or python3.10 only for compatibility with older application stacks.
  • Use python3.15 only 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 sudo for 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-pip adds a system-level python3 -m pip command for Fedora’s default interpreter.
  • python3-devel is Fedora’s equivalent of Ubuntu’s python3-dev; it adds headers and build files for native C extensions and embedded Python work.
  • python-unversioned-command adds /usr/bin/python if 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.

NeedDefault Branch PackageVersioned ExampleWhat It Adds
Tkinter GUI supportpython3-tkinterpython3.13-tkinterPython’s Tk GUI toolkit
IDLE desktop editorpython3-idlepython3.13-idleThe bundled Python editor and shell
Debug runtimepython3-debugVersioned debug builds vary by branchA slower runtime with extra debugging hooks
Free-threaded runtimepython3.14-freethreadingpython3.13-freethreading or python3.15-freethreadingA 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.15 is 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 python3 to another branch in your shell startup files, replace /usr/bin/python3 with 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. Use python3 -m venv or python3.x -m venv for 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 python3 probe on Fedora 44 Workstation failed because gnome-shell requires /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.

Share this guide

Help another Linux user troubleshoot faster

Share this guide with someone troubleshooting Linux systems or saving it for later.

Follow LinuxCapable

Want more LinuxCapable guides in Google?

Add LinuxCapable as a preferred source so Google can show more of our fresh Linux tutorials in Top Stories and From your sources when relevant.

Add LinuxCapable as a preferred source on Google
Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffeeBuy me a coffee
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed in published comments:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<blockquote>quote</blockquote> quote block

Got a Question or Feedback?

We read and reply to every comment - let us know how we can help or improve this guide.

Verify before posting: