On macOS, the command python is often missing because modern Python installations only provide python3. To resolve this, you must manually create a symbolic link or shell alias that maps python to python3, as standard package managers do not always handle this backward compatibility automatically.
Why Python 2 is Missing on Modern Macs
Apple used to ship Python 2.7 with macOS, which allowed users to simply typepython in the terminal. However, Python 2 reached its end of life in January 2020. Consequently, newer versions of macOS no longer include it by default. When you install Python using Homebrew or the official installer, the executable is named python3 to distinguish it from any legacy system binaries or future Python 4 releases. This naming convention breaks scripts and workflows that rely on the generic python command, leading to the "command not found" error you are experiencing.
Understanding this shift is crucial for maintaining a consistent development environment. If you have been working with Python for six months, you likely installed it via Homebrew or downloaded the installer from python.org. Both methods prioritize explicit versioning. This approach prevents conflicts between different projects that might require specific minor versions of Python 3. It also ensures that your system remains clean of deprecated software. For more insights into managing technical support scenarios where path confusion arises, consider reading about Practical Example: Using Non-Canonicalized Paths in Tech Support.
Verifying Your Installation
Before creating aliases, you should confirm that Python 3 is actually installed and accessible. Open your Terminal application and run the following command:which python3
If the output points to a directory like /usr/local/bin/python3 (on Intel Macs) or /opt/homebrew/bin/python3 (on Apple Silicon Macs), then the interpreter is present. You can also check the version by running python3 --version. If these commands fail, you may need to reinstall Python using Homebrew by executing brew install python. Note that this installs the latest stable version of Python 3.
It is important to distinguish between the system Python and user-installed Python. macOS does not allow modifying the system Python without disabling System Integrity Protection (SIP), which is risky. Therefore, relying on the user-space installation provided by Homebrew or the official installer is the recommended path. This keeps your system files intact while giving you full control over your development tools.
Creating the Python Alias
The most reliable way to fix thepython not found error is to create an alias in your shell configuration file. This method works for both Bash and Zsh, which are the default shells on macOS. First, determine which shell you are using by checking the $SHELL environment variable. Most modern Macs use Zsh, so the configuration file is typically ~/.zshrc. If you are using Bash, the file is ~/.bash_profile or ~/.bashrc.
Open your preferred text editor and add the following line to the end of your configuration file:
alias python=python3
This tells your shell to substitute python with python3 every time you type it. After saving the file, you must reload your shell configuration for the changes to take effect immediately. Run the following command in your terminal:
source ~/.zshrc
If you are using Bash, replace .zshrc with .bash_profile. Once reloaded, typing python --version should now return the version of Python 3 you have installed. This solution is lightweight and does not interfere with other system processes. It provides a seamless transition for developers accustomed to the older python command syntax.
Alternative: Creating a Symlink
Some users prefer creating a symbolic link instead of an alias. This approach creates a physical file entry in your PATH that points to the Python 3 binary. To do this, you can use theln command. However, you must ensure you have write permissions to the target directory. A common location is /usr/local/bin on Intel Macs or /opt/homebrew/bin on Apple Silicon Macs.
Run the following command to create the link:
sudo ln -s $(which python3) /usr/local/bin/python
You will be prompted for your administrator password. This method is useful if you want the alias to persist across different shells or sessions without modifying shell-specific configuration files. However, it requires administrative privileges and can sometimes conflict with package manager updates. The alias method is generally safer because it operates entirely within your user space.
Maintaining Consistency Across Projects
While fixing the globalpython command is helpful, it is best practice to use virtual environments for individual projects. Virtual environments isolate dependencies and prevent version conflicts. Tools like venv or poetry allow you to specify the exact Python version required for each project. This ensures that your code runs consistently regardless of the global Python configuration.
For example, you can create a virtual environment using the newly aliased python command:
python -m venv myenv
This creates a folder named myenv containing a local copy of Python and pip. Activating this environment ensures that all subsequent commands use the isolated interpreter. This workflow is essential for professional development and helps avoid the "it works on my machine" syndrome. By combining proper aliasing with virtual environments, you create a robust and flexible development setup on macOS.
Frequently Asked Questions
Will this break existing scripts?
No, creating an alias or symlink forpython to point to python3 will not break existing scripts. In fact, it ensures that scripts expecting a python interpreter can find one. Since Python 3 is backward compatible with most Python 2 code, this change is generally safe for modern development workflows.
How do I revert this change?
To revert the change, simply remove the alias line from your.zshrc or .bash_profile file. If you created a symlink, delete it using the rm command on the target path. After making these changes, reload your shell configuration to restore the previous behavior.
Can I use pyenv instead?
Yes,pyenv is an excellent alternative for managing multiple Python versions. It allows you to switch between different versions of Python 2 and Python 3 seamlessly. While it requires more initial setup than a simple alias, it offers greater flexibility for complex projects requiring specific interpreter versions.
What if I am using a different shell?
If you are using Fish, Zsh, or another shell, the configuration file and syntax may differ. For Fish, you would usefish_add_path or define the alias in ~/.config/fish/config.fish. Always consult the documentation for your specific shell to ensure the correct syntax is used.
Is it safe to modify system paths?
Modifying user-level paths like/usr/local/bin is generally safe and recommended. Avoid modifying system directories like /usr/bin directly, as this can interfere with macOS updates and security features. Using Homebrew-managed directories or user-specific aliases minimizes the risk of system instability.