Hello!
Ran in to a weird problem this week: I created a Python 3.7.9 venv, but I couldn’t activate it in PoweShell (my shell of choice). The Activate.ps1
script was missing.
The core docs for 3.7 list VENV/Scripts/Activate.ps1
as the command to activate venvs in PowerShell (which seemed odd because I’m used to VENV/bin/activate
from Bash, but whatever). The Scripts
directory didn’t even exist:
gci ./test_venv_379/ Directory: /Users/adam/Local/fiddle/test_venv_379 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 10/22/2020 9:28 AM bin d---- 10/22/2020 9:28 AM include d---- 10/22/2020 9:28 AM lib ----- 10/22/2020 9:28 AM 98 pyvenv.cfg
I recreated the venv and got the same results. I made new venvs with 3.7.8 and 3.6.11, and again the same results. When I made a 3.8.5 venv, though, it had a VENV/bin/Activate.ps1
(which works great).
gci ./test_venv_385/bin Directory: /Users/adam/Local/fiddle/test_venv_385/bin Mode LastWriteTime Length Name ---- ------------- ------ ---- ----- 10/22/2020 9:13 AM 2236 activate ----- 10/22/2020 9:13 AM 1288 activate.csh ----- 10/22/2020 9:13 AM 2440 activate.fish ----- 10/22/2020 9:13 AM 8834 Activate.ps1 ----- 10/22/2020 9:13 AM 263 easy_install ...
Then I read the docs for 3.8: VENV/Scripts/Activate.ps1
is the PowerShell activation script but VENV/bin/Activate.ps1
is the PowerShell Core activation script. The 3.7 and 3.6 docs don’t make this distinction, which I’d bet is because PowerShell Core wasn’t supported until 3.8. I’m running Posh on Mac, so of course I’m running Posh Core (only Core supports Mac and Linux).
I suspect the VENV/Scripts/Activate.ps1
file was missing from both venvs because Python detected my shell was Posh Core, which it didn’t support. That would also explain why my 3.8 venv only had a VENV/bin/Activate.ps1
file, the file needed by Posh Core.
Anyway, if you upgrade to 3.8 (I used 3.8.5) you should be good to go.
If you can’t upgrade. Upgrade! But if you really really can’t, you can still use a 3.7 venv in Posh Core. Just call the executables by path instead of activating:
./test_venv_385/bin/python --version Python 3.8.5
Hope that gets you past the problem!
Adam
Need more than just this article? We’re available to consult.
You might also want to check out these related articles: