How can I upgrade Python version and packages in pyenv virtualenv?
Question:
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?
Answers:
If you use anaconda, just type
conda install python==$pythonversion$
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 founds an universal wheel in its cache it installs the package from the cache. Other packages will be downloaded, cached, built and installed.
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 virtualenv 3.9.0 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 sure.
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
).
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?
If you use anaconda, just type
conda install python==$pythonversion$
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 founds an universal wheel in its cache it installs the package from the cache. Other packages will be downloaded, cached, built and installed.
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 virtualenv 3.9.0 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 sure.
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
).