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.