pythonmacos

Why am I getting "Permission denied" when activating a venv?


I just started a new python project and created a venv inside the project folder by running virtualenv venv in the terminal. However, when I run venv/bin/activate I get a permission denied error.

I have tried

sudo chown -R user:user project/venv

but I get

chown: user: illegal group name

I have set these venvs up a ton of times and never had the issue. Is there anything else I can try?

I am on a Mac.


Solution

  • You need to run

    . venv/bin/activate
    

    or

    source venv/bin/activate
    

    The activate file is deliberately not executable because it must be sourced.

    It must be sourced because it needs to make changes to the environment. If it is run as a script, it will only make changes to the environment of the child process used to run the script.

    Someone in the comments asked about the . command. From the man page for bash:

        .  filename [arguments]
       source filename [arguments]
              Read  and execute commands from filename in the current shell
              environment and return the exit status of the last command
              executed from filename.
    

    In short, . is a shell built-in that means the same thing as the source built-in.