【发布时间】:2021-10-21 04:02:58
【问题描述】:
下面是我想要用我的 Python 脚本做的事情:
- 创建虚拟环境
- 将目录更改为环境
- 激活环境
- 安装 django
- 做其他事情...
我已成功创建环境并使用以下内容更改目录:
import subprocess
import os
env_name = "env_new"
subprocess.run(["py", "-m", "venv", env_name])
chdir(env_name)
但激活环境是另一回事:
subprocess.run(["source", "./Scripts/activate"]) # Also tried with activate.bat
结果:
FileNotFoundError: [WinError 2] 系统找不到指定的文件
subprocess.run([".", "./Scripts/activate"]) # Also tried with activate.bat
结果:
PermissionError: [WinError 5] 访问被拒绝
为了澄清,我使用 print(os.getcwd()) 确保我在正确的目录中。
在此之后,我想安装 django。我认为它必须发生在同一个 run() 方法中,如下所示:
subprocess.run([".", "./Scripts/activate", "&&", "pip", "install", "django"]) # Or something...
这可能吗?
【问题讨论】:
-
如果你在 Windows 上,你的 shell 是什么?您不能在子进程中有效地运行
activate,因为一旦子进程退出,结果就会消失。此外,如果没有shell=True,您将无法使用 Bash 内置的.。通常的解决方案是在启动 Python 之前activate,但根据您的需要,您也可以将 Python 作为 Python 的子进程运行;尽管这通常是您想要避免的。 -
我正在使用 git bash。我无法事先激活它,因为自动创建环境以及在环境中创建文件都需要在脚本中进行。
-
激活脚本的路径是
<venv-name>/bin/activate。source是 bash 内置的,而不是命令,您需要在同一个进程中执行它,然后才能执行更多步骤。 -
我知道它的
<venv-name>/bin/activate,但我一直在测试环境中的激活。 “source是 bash 内置的”,.呢