I have a venv folder in ~/Desktop/Directory/venv.
I use the command source venv/bin/activate to activate the environment.
I can activate the environment from ~/Desktop/Directory and from ~/ but I cannot activate it from Desktop.
I am confused as to where I can activate the environment from.
thanks
If the virtualenv is in ~/Desktop/Directory/venv, you can activate it from anywhere, you just have to provide the full path to the activate script in your call to source …
For example, running:
source ~/Desktop/Directory/venv/bin/activate
Will likely work from anywhere since it provides the full path to activate
This is not a question about Python nor virtual environments; it is a question about the command line, paths and the current working directory.
I can activate the environment from
~/Desktop/Directory
Yes, because when that is the current working directory, there is a venv folder in that directory, which contains a bin folder, which contains an activate script; thus the relative path venv/bin/activate means that script.
but I cannot activate it from Desktop.
Yes, because there is not a venv folder in that directory (i.e. on your desktop), so the relative path venv/bin/activate is not valid here. From here, the relative path to the previously mentioned activate script would be Directory/venv/bin/activate.
and from ~/
This tells us that there is a venv folder directly in your home directory - in other words, a separate venv folder (meaning, a separate virtual environment) from the one that is in ~/Desktop/Directory/venv. Using the command source venv/bin/activate while in that directory, will activate that virtual environment.
Alternately, you can use an absolute path to anywhere in the file system. In the Linux shell, ~ will automatically expand into an absolute path to the home directory (typically something like /home/your_user_name), so a command like source ~/Desktop/Directory/venv/bin/activate will run the script located at /home/your_user_name/Desktop/Directory/venv/bin/activate (modified as appropriate to how your system is actually configured). This way will not care what the current working directory is.
Thanks for the detailed explanation, I never understood relative vs absolute paths.