我有一个要在 Windows PowerShell 中运行的脚本。使用相对路径时可以正常工作,但使用绝对路径时则不行。如何才能让它在使用绝对路径时也能正常工作?
例子:
从终端运行这个程序有效(从 C: 目录运行)
PS C:\> .\venvs\my_venv\Scripts\activate
(my_venv) PS C:\>
这不起作用
PS C:\> C:\venvs\my_venv\Scripts\activate
PS C:\>
我期待着
PS C:\> C:\venvs\my_venv\Scripts\activate
(my_venv) PS C:\>
答案1
以下是对我有用的方法。执行创建虚拟环境时自动生成的 Activate.ps1 文件,而不是 activate。使用 Python 3.11.0 和 virtualenv 20.20.0 进行测试。
PS C:\> C:\...\pyenv\Scripts\Activate.ps1
以下是完整的评论日志:
PS C:\Users\justinw> python -m venv pyenv
# activates as expected
PS C:\Users\justinw> .\pyenv\Scripts\activate
(pyenv) PS C:\Users\justinw> deactivate
# doesn't activate as expected
PS C:\Users\justinw> C:\Users\justinw\pyenv\Scripts\activate
# activates using absolute path
PS C:\Users\justinw> C:\Users\justinw\pyenv\Scripts\Activate.ps1
(pyenv) PS C:\Users\justinw> deactivate
# FYI on default Scripts created
PS C:\Users\justinw> ls .\pyenv\Scripts\
Directory: C:\Users\justinw\pyenv\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/22/2023 11:14 AM 2064 activate
-a---- 4/22/2023 11:14 AM 993 activate.bat
-a---- 4/22/2023 11:14 AM 24167 Activate.ps1
-a---- 4/22/2023 11:14 AM 393 deactivate.bat
-a---- 4/22/2023 11:14 AM 108400 pip.exe
-a---- 4/22/2023 11:14 AM 108400 pip3.10.exe
-a---- 4/22/2023 11:14 AM 108400 pip3.11.exe
-a---- 4/22/2023 11:14 AM 108400 pip3.exe
-a---- 4/22/2023 11:13 AM 268152 python.exe
-a---- 4/22/2023 11:13 AM 256384 pythonw.exe
PS C:\Users\justinw>
答案2
只需在单引号或双引号之前和之内使用一个点来运行(以防路径名中有空格):
.'C:\> C:\...\pyenv\Scripts\Activate.ps1'