Managing Parallel pip and pip3 Installations on Ubuntu
Package Acquisition
Retrieve the package managers for both Python versions using the system repository:
sudo apt-get update
sudo apt-get install python-pip python3-pip
Locating Interpreter Binaries
Determine the exact filesystem paths for the installed interpreters:
command -v python2.7
command -v python3.6
Typically, these resolve to /usr/bin/python2.7 and /usr/bin/python3.6.
Establishing Shell Aliases
Open the shell configuration file for editing:
nano ~/.bashrc
Append alias definitions at the end of the file to enforce explicit interpreter and package manager paths:
alias pip2='/usr/bin/pip2'
alias pip3='/usr/bin/pip3'
alias python='/usr/bin/python2.7'
alias python3='/usr/bin/python3.6'
Apply the modifications immediately:
source ~/.bashrc
Adjusting Executable Entry Points
System updates may overwrite pip executables. Modifying the entry point scripts ensures correct interpreter invocation and compatibility.
Configuring /usr/bin/pip2
Edit the Python 2 package manager script:
sudo nano /usr/bin/pip2
Replace its contents with a streamlined entry point pointing to Python 2.7:
#!/usr/bin/python2.7
# Dynamic entry point for Python 2 package management
import sys
from pip import main as run_pip2
if __name__ == '__main__':
sys.exit(run_pip2())
Configuring /usr/bin/pip3
Edit the Python 3 package manager script:
sudo nano /usr/bin/pip3
Implement logic to handle the API transition in newer Python 3 versions and prevent execution under incorrect interpreters:
#!/usr/bin/python3
# Dynamic entry point for Python 3 package management
import sys
current_major = sys.version_info[0]
current_minor = sys.version_info[1]
def execute_pip():
if current_major != 3:
print(f"Error: Python {current_major} detected. pip3 requires Python 3.")
print("Switch versions using 'update-alternatives --config python'.")
return 1
# Handle API changes for Python 3.8+
if current_minor >= 8:
from pip import __main__
return __main__._main()
from pip import main
return main()
if __name__ == '__main__':
sys.exit(execute_pip())
Validation
Confirm that the binaries resolve to the expected versions:
python --version
pip2 --version
python3 --version
pip3 --version