使用Python脚本创建并激活虚拟环境

问题描述 投票:0回答:1

我有一个创建并激活虚拟环境的脚本

import os
import platform
import subprocess
import venv

# Determine the user's platform
current_platform = platform.system()

# Define the name of the virtual environment
venv_name = "my_venv"


# Create the virtual environment using EnvBuilder
builder = venv.EnvBuilder(system_site_packages=False, clear=True, symlinks=False, upgrade=False, with_pip=True)
builder.create(venv_name)

# Activate the virtual environment
if current_platform == "Windows":
    activate_path = os.path.join(venv_name, "Scripts", "activate.ps1")
    subprocess.call([f"powershell.exe", f"{activate_path}"])
else:
    activate_path = os.path.join(venv_name, "bin", "activate")
    subprocess.call([f"bash", f"source {activate_path}"])

它适用于 Windows,但是当脚本执行完成时,venv 不会保持活动状态。这意味着我无法在终端中访问 venv,这是可取的。如果我写“.\my_venv\Scripts\Activate.ps1”,那么我会看到它已被激活。有没有人有办法解决这个问题?

执行脚本,预计 venv 将在终端中保持活动状态,但事实并非如此。

python python-3.x subprocess virtualenv
1个回答
0
投票

你想要的在 *nix 系统上是不可能的。该进程可以影响其环境及其子进程环境。为了让 venv 在脚本“完成执行”时保持活动状态,您必须使用

os.exec*()

def main()->None:
    """
    https://stackoverflow.com/questions/21641405/replace-a-running-python-script-with-os-execl
    https://stackoverflow.com/questions/4025442/what-does-os-execl-do-exactly-why-am-i-getting-this-error
    """
    my_venv: str = ensure_venv()
    shell:str = os.getenv('SHELL', 'bash')
    os.execvp(shell, ['-i',])

完整来源

© www.soinside.com 2019 - 2024. All rights reserved.