pyenv-virtualenv for managing python virtual environment.
I have a project working in
Python 3.4 virtual environment.
So all installed packages(
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$
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
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:
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).