Scenario

You have installed Python packages locally in one version and now wish to use them in a different version. For example, you have been using Python 3.6 but it is obsolete and will be removed soon, so you need to set up those packages for Python 3.8. There are several ways to accomplish this, depending on the package manager. In this how-to we will discuss pip and conda.

You will need to load the module for the newer Python version. For this example,


module load miniforge

Pip

The Python packages are installed in a hidden location under your home directory:

~/.local/lib/pythonx.y/site-packages

where x and y are the major and minor Python versions, respectively.

Preserve individual package versions

To preserve the versions for all individual packages, first freeze the environment into a file, say requirements.txt:


pip freeze --path ~/.local/lib/python3.6/site-packages > requirements.txt

Next, install the packages:


pip install --user -r requirements.txt

Use the latest versions or whichever are mutually compatible

If you have no preference on the package versions, you can remove the version requirements:


pip freeze --path ~/.local/lib/python3.6/site-packages | sed 's/==.*$//g' > requirements.txt

Install the packages:


pip install --user -r requirements.txt

Conda

You can create/load a conda environment that uses a different Python version with the Miniforge module. Suppose the environment name is myenv. You can either update the existing environment or create a new one.

Update Python in the old environment

source activate myenv
conda install python=3.8

Note that if you have many packages in the environment, such an update could take very long due to conda’s slow dependency resolution. Individual package versions are not preserved.

Create the new environment

It is better to create a new environment and let the dependency solver do its work from scratch:

conda create -n mynewenv python=3.8 <list of packages>

Use the syntax <package>=<version> if you have version requirements.

Run conda list -n myenv to get a list of all packages in myenv. You can use the following command to show the same list in one line without version information:


conda list -n myenv | awk '{if($1 !~ /^#/) print $1}' | tr '\n' ' '

Please also visit this page for more information.