Here is my take on the problem. Works for Python3. The main features are: - Each Python version is compiled from source
- All versions are installed locally
- Does not mangle your system's default Python installation in any way
- Each Python version is isolated with virtualenv
Prerequisites: If you are using some bare-bones thin client with no extra turf installed, you should run this first (in ubuntu 18.04 at least, extra packages
added for convenience): sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository universe
sudo apt-get update
sudo apt-get install -y build-essential cmake
sudo apt-get install -y zlib1g zlib1g-dev libsqlite3-dev \
openssl libssl-dev libffi-dev unzip pciutils net-tools \
libblas-dev gfortran libblas3
The steps are as follows: If you have several extra python versions installed in some other way, get rid of them, e.g., remove $HOME/.local/lib/python3.x, etc. (also the globally installed ones). Don't touch your system's default python3 version though. Download source for different python versions under the following directory structure: $HOME/
python_versions/ : download Python-*.tgz packages here and "tar xvf" them. You'll get directories like this:
Python-3.4.8/
Python-3.6.5/
Python-3.x.y/
...
At each "Python-3.x.y/" directory, do the following
(do NOT use "sudo" in any of the steps!): mkdir root
./configure --prefix=$PWD/root
make -j 2
make install
virtualenv --no-site-packages -p root/bin/python3.x env
At "python_versions/" create files like this: env_python3x.bash:
#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
Now, anytime you wish to opt for python3.x, do source $HOME/python_versions/env_python3x.bash
to enter the virtualenv While in the virtualenv, install your favorite python packages with pip install --upgrade package_name
To exit the virtualenv and python version just type "deactivate"
UPDATE It seems that --no-site-packages is
deprecated. There's an easy fix for this: Once you have activated the virtualenv, just point the HOME env variable to somewhere else than your actual home directory, i.e.: export HOME=some/where/else
A nice way to do this in general is: - Create virtualenv
- Activate virtualenv
- If you want to "recycle" existing libraries to your virtualenv, softlink them from your existing install, i.e.
ln -s $HOME/.local/lib/python3.6/site-packages/numpy $PWD/venv/lib/python3.6/site-packages/ - Do
export PYTHONPATH= , export HOME=/some/other/dir
Now you should have custom-isolated virtualenv.
UPDATE 2 / SUDO Wan't to force sudo to use your virtualenv? Defaults secure_path="/home/USENAME/Python-3.x.y/env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults env_keep += "VIRTUAL_ENV"
Defaults env_keep += "PYTHONPATH"
Now try "sudo python3 --version" and magic should happen UPDATE 3 / DOCKER Enable virtualenv inside your docker (of course, you have built it in your docker image): ENV VIRTUAL_ENV=/home/USER/Python-3.x.y/env
ENV PYTHONPATH=
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
So I have python 2.7.3 installed on Windows 7 64 bit and I want to do an incremental upgrade to version 2.7.5. I have pip installed and it works fine; I just installed Django using it. I ran into this command: pip install --upgrade 'python>=2.7,<2.7.99' Now it forces pip to download the latest version that is not Python 3 which is what I want. 2.7.5 starts downloading and I get the following error: Downloading/unpacking python>=2.7,<2.7.99
Downloading Python-2.7.5.tar.bz2 (12.1MB): 12.1MB downloaded
Running setup.py egg_info for package python
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "c:\users\name\appdata\local\temp\pip-build-name\python\setup.py", line 33, in <module>
COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
TypeError: argument of type 'NoneType' is not iterable
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "c:\users\name\appdata\local\temp\pip-build-name\python\setup.py", line 33, in <module>
COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
TypeError: argument of type 'NoneType' is not iterable
----------------------------------------
Command python setup.py egg_info failed with error code 1 in c:\users\name\appdata\local\temp\pip-build-name\python
Also I am new to pip. When I cancel a
download is that safe? I typed install "pip install python" and it started downloading version python version 3. So I cancelled. That won't override my main python 2.7.3 install? Curious.
Is pip linked to Python version?
PIP is a package manager for Python packages, or modules if you like. Note: If you have Python version 3.4 or later, PIP is included by default.
How do I change pip package version?
To install a specific version of a Python package you can use pip: pip install YourPackage==YourVersion . For example, if you want to install an older version of Pandas you can do as follows: pip install pandas==1.1. 3 .
Can you update Python through pip?
The pip package manager can be used to update one or more packages system-wide. However, if your deployment is located in a virtual environment, you should use the Pipenv package manager to update all Python packages.
|