Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

Python in RHEL 8

November 14, 2018
Petr Viktorin
Related topics:
LinuxPython
Related products:
Red Hat Enterprise Linux

    Ten years ago, the developers of the Python programming language decided to clean things up and release a backwards-incompatible version, Python 3. They initially underestimated the impact of the changes, and the popularity of the language. Still, in the last decade, the vast majority of community projects has migrated to the new version, and major projects are now dropping support for Python 2.

    In Red Hat Enterprise Linux 8, Python 3.6 is the default. But Python 2 remains available in RHEL 8.

    Using Python in RHEL 8

    To install Python, type yum install python3.

    To run Python, type python3.

    If that doesn't work for you, or you need more details, read on!

    Python 3

    In RHEL 8, Python 3.6 is the default, fully supported version of Python. It is not always installed, however. Similarly to any other available tool, use yum install python3 to get it.

    Add-on package names generally have the python3 prefix. Use yum install python3-requests to install the popular library for making HTTP connections.

    Python 2

    Not all existing software is ready to run on Python 3. And that’s OK! RHEL 8 still contains the Python 2 stack, which can be installed in parallel with Python 3. Get it using yum install python2, and run with python2.

    Why not just “Python”?

    Okay, okay, so there's python3 and python2. But what if I use just python? Well…

    $ python
    -bash: python: command not found
    

    There is no python command by default.

    Why? Frankly, we couldn’t agree what python should do. There are two groups of developers. One expects python to mean Python 2, and the other Python 3. The two don't always talk to each other, so you might be a member of one camp and not know anyone from the other – but they do exist.

    Today, in 2018, the python == python2 side is more popular, even among those that prefer Python 3 (which they spell out as python3). This side is also backed by an official upstream recommendation, PEP 394. However, we expect that this viewpoint will become much less popular over the lifespan of RHEL 8. By making python always mean Python 2, Red Hat would be painting itself into a corner.

    Unversioned Python command

    That said, there are applications that expect a python command to exist and that assumption might be hard to change. That’s why you can use the alternatives mechanism to enable the unversioned python command system-wide, and set it to a specific version:

    alternatives --set python /usr/bin/python3

    For Python 2, use /usr/bin/python2 instead. For details on how to revert the changes or do the setup interactively, see man unversioned-python.

    Note, We do not recommend this approach. We recommend you explicitly refer to python3 or python2. That way, your scripts and commands will work on any machine that has the right version of Python installed.

    Note that this works only for the python command itself. Packages and other commands don't have configurable unversioned variants. Even if you configure python, the commands yum install python-requests or pip won't work.

    Always use the explicit version in these cases. Better yet, don't rely on the wrapper scripts for pip, venv and other Python modules that you call from the command line.  Instead use python3 -m pip, python3 -m venv, python2 -m virtualenv.

    Third-party packages

    Not all Python software is shipped with RHEL 8 – there's only so much that Red Hat can verify, package and support.

    To install a third-party package, many sources on the Internet will suggest using sudo pip install. Do not do this! This command translates to “download a package from the internet, and run it on my machine as root to install it”.

    Even if the package is trustworthy, this is a bad idea. A large part of RHEL 8 relies on Python 3.6. If you throw in another package, there's no guarantee that it will co-exist peacefully with the rest of the system. There are some protections in place, but you should generally assume that sudo pip will break your system.

    (Not to mention it won’t work as-is: the command name is pip3 or pip2.)

    If you want to use third-party packages, create a virtual environment using python3 -m venv --system-site-packages myenv (or for Python 2, install python2-virtualenv and run python2 -m virtualenv --system-site-packages myenv). Then, activate the environment using source myenv/bin/activate, and install packages into it using pip install. The packages will then be available as long as the environment is activated. While this does not protect you against malicious packages, it does protect the system from unexpected breakage.

    When a virtual environment is active, unversioned commands like python and pip will refer to the Python version that created the virtual environment. So, to install the Requests package, run  pip install requests (or if you prefer being explicit, python -m pip install requests).

    The --system-site-packages switch makes the environment re-use libraries installed system-wide. Leave it out to get an isolated environment, where all libraries outside Python's standard library need to be installed explicitly.

    Another possibility is installing user-specific packages with pip’s --user switch. The command python3 -m pip install --user flake8 will make the flake8 linter available to you personally, leaving system tools like yum unaffected.

    If you truly need something installed system-wide, build a RPM package and use yum install.

    Obligatory note: Third-party packages installed with pip are not reviewed or supported by Red Hat.

    Platform-Python: The Python behind the curtain

    Careful readers might have noticed a discrepancy here: Python is not installed by default, but yum is, and yum is written in Python. What magic makes that possible?

    It turns out there is an internal Python interpreter called “Platform-Python”. This is what system tools use. It only includes the parts of Python needed for the system to function, and there are no guarantees that any particular feature won't be removed from it in the future.

    However, libraries for Platform-Python are shared with the “user-visible” Python 3.6. This conserves disk space, and it also means that, for example, yum extensions built for Python 3.6 will work for the system tool.

    If you are not re-building the distro, do not use Platform-Python directly. Install python3 and use that.

    Porting to Python 3

    It won’t be in RHEL 8, but there will come a day when support for Python 2 will end. If you maintain Python 2 code, you should think about porting it to Python 3.

    Python 3 was first released in 2008. For over a decade, it has been improving in features, performance and – ironically – compatibility with Python 2. You might have heard horror stories and urban legends about porting code to Python 3.0 or 3.2 that would be much less scary nowadays.

    I’m not saying porting is trivial now, but it’s definitely gotten easier. As with any other change to a system, porting to Python 3 mainly requires knowledge of your codebase, good tests – and some time.

    What’s the reward? Python 3 is a better language – after all, it's the language Python 2 developers choose to use! For enterprise applications, the main feature is reduced risk of hard-to-debug, input-dependent bugs when handling non-ASCII text such as people’s names (or emoji).

    There are many community resources that document and help with porting to Python 3.

    If you are reading this blog, you are probably working on a large, conservative code base. We ported a few of those, and distilled our experience in the the Conservative Porting Guide, a hands-on walkthrough that focuses on compatibility and keeping working code throughout the porting process. Give it a try, and if you find that something is not covered, let us know – or even send a pull request to it!

    If you maintain Python C extensions, a similarly focused guide is part of the py3c project.

    Takeaways

    To install or run Python on RHEL 8, use python3 – unless you have a different version in mind.

    Do not use sudo pip.

    Do not use platform-python for your applications. However, use platform-python if you are writing system/admin code for RHEL 8.

    And if you have some code for Python 2, now is a great time to start modernizing it.

    Enjoy Python in RHEL 8!

     

    Last updated: February 22, 2024

    Recent Posts

    • Trusted software factory: Building trust in the agentic AI era

    • Build a zero trust AI pipeline with OpenShift and RHEL CVMs

    • Red Hat Hardened Images: Top 5 benefits for software developers

    • How EvalHub manages two-layer Kubernetes control planes

    • Tekton joins the CNCF as an incubating project

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Build

    • Developer Sandbox
    • Developer tools
    • Interactive tutorials
    • API catalog

    Quicklinks

    • Learning resources
    • E-books
    • Cheat sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site status dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2026 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Chat Support

    Please log in with your Red Hat account to access chat support.