My aim is to install ALL packages I need for a project to a non-default location.
virtualenv (I am OK with
virtualenv being installed in the default location like
sudo apt install python3-pip # sudo if necessary pip3 install virtualenv
Then create a root folder for all the virtual environments (this is optional):
# cd to somewhere mkdir myvirtualenvs
Next a specific virtual environment can be created:
cd myvirtualenvs sudo virtualenv --no-site-packages my-project-virtualenv
--no-site-packages is now the default behavior, meaning
my-project-virtualenv is not going to use the global python packages (i.e. packages in
/usr/lib/python3.5/site-packages). It’s OK to remove this option in my case. Double check by
Activiate this virtual environment:
Install packages by
pip3 install scikit-learn==0.19.1
Caution: if you are not going to use
sudo, the above command works well.
skleran package will be directly installed to
myvirtualenvs/my-project-virtualenv/lib/python3.5/site-packages. HOWEVER, if you need
sudo, even when your are in the activated environment, it will be installed to the global destination (i.e.
An explanation I found is from stackoverflow: How to install a package inside virtualenv?:
When you use sudo pip install package, you are running Virtualenv as root, escaping the whole environment which was created, and then, installing the package on global site-packages, and not inside the project folder where you have a Virtual Environment, although you have activated the environment.
In this case, you need to specify the destination:
sudo pip3 install scikit-learn==0.19.1 -t myvirtualenvs/my-project-virtualenv/lib/python3.5/site-packages
Check if it’s installed inside the activated environment by
python3 -c "import sklearn".