How can I upgrade Python version and packages in pyenv virtualenv?
Asked Answered
D

4

35

I used pyenv, pyenv-virtualenv for managing python virtual environment.

I have a project working in Python 3.4 virtual environment.

So all installed packages(pandas, numpy etc) are not newest version.

What I want to do is to upgrade Python version from 3.4 to 3.6 as well as upgrade other package version to higher one.

How can I do this easily?

Diner answered 22/6, 2017 at 7:19 Comment(1)
maybe create a new virtual environment?Exscind
N
10

Use pip freeze > requirements.txt to save a list of installed packages.

Create a new venv with python 3.6.

Install saved packages with pip install -r requirements.txt. When pip finds a universal wheel in its cache it installs the package from the cache. Other packages will be downloaded, cached, built and installed.

Ned answered 22/6, 2017 at 13:25 Comment(1)
This is half the solution so I don't understand why it's chosen as the solution for this post. Not only do you have to save your requirements, but you have to nuke your old virtual env, create a new one with the new python version and then restore your requirements! @Abscise has the right answer abovePrecipitation
A
44

Here is how you can switch to 3.9.0 for a given virtual environement venv-name:

pip freeze > requirements-lock.txt
pyenv virtualenv-delete venv-name
pyenv install -s 3.9.0
pyenv virtualenv 3.9.0 venv-name
pyenv activate venv-name
pip install -r requirements-lock.txt

Once everything works correctly you can safely remove the temporary requirements lock file:

rm requirements-lock.txt

Note that using pip freeze > requirements.txt is usually not a good idea as this file is often used to handle your package requirements (not necessarily pip freeze output). It's better to use a different (temporary) file just to be safe.

Abscise answered 11/11, 2020 at 10:47 Comment(3)
If you don't have 3.9.0 install on your system, you'll have to do run pyenv install -v 3.9.0 before you create the new virtualenv.Pilgrimage
You are right, I'll add that line just in caseAbscise
You also need to activate the virtual environment by running pyenv activate venv-name before pip install -r requirements-lock.txt.Mungovan
N
10

Use pip freeze > requirements.txt to save a list of installed packages.

Create a new venv with python 3.6.

Install saved packages with pip install -r requirements.txt. When pip finds a universal wheel in its cache it installs the package from the cache. Other packages will be downloaded, cached, built and installed.

Ned answered 22/6, 2017 at 13:25 Comment(1)
This is half the solution so I don't understand why it's chosen as the solution for this post. Not only do you have to save your requirements, but you have to nuke your old virtual env, create a new one with the new python version and then restore your requirements! @Abscise has the right answer abovePrecipitation
R
8

OP asked to upgrade the packages alongside Python. No other answers address the upgrade of packages. Lock files are not the answer here.


Save your packages to a requirements file without the version.

pip freeze | cut -d"=" -f1 > requirements-to-upgrade.txt

Delete your environment, create a new one with the upgraded Python version, then install the requirements file.

pyenv virtualenv-delete venv-name
pyenv virtualenv 3.6.8 venv-name
pip install -r requirements-to-upgrade.txt

The dependency resolver in pip should try to find the latest package. This assumes you have the upgrade Python version installed (e.g., pyenv install 3.6.8).

Radford answered 25/10, 2022 at 0:3 Comment(0)
S
-4

If you use anaconda, just type

conda install python==$pythonversion$

Swihart answered 22/6, 2017 at 7:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.