Проблема создания новой виртуальной среды

Я пытаюсь выполнить задачу, в которой я должен запустить poetry virtual environments и выполнить некоторый код, который должен запустить свою виртуальную среду и выполнить в ней свой код.

Но есть проблема: виртуальная среда остается прежней.

import typer

def typer_main(path_to_bath: str = typer.Argument('test')):
    subprocess.run(path_to_bath)


def script_main():
    """Точка входа для запуска скрипта."""
    typer.run(typer_main)


if __name__ == '__main__':
    script_main()

run.bat (C:\User\Documents\prj2)

cd path/to/prj2
poetry install
poetry show -v

runner.py

import subprocess

import typer

def typer_main(path_to_bath: str = typer.Argument('test')):
    subprocess.run(path_to_bath)


def script_main():
    """Точка входа для запуска скрипта."""
    typer.run(typer_main)


if __name__ == '__main__':
    script_main()

start.bat

poetry install
poetry run python runner.py ./path/to/prj2/run.bat
poetry show -v

Запуск:

./start.bat

Вывод

(project1-py3.10) PS C:\Users\User\Documents\project1>./start.bat

(project1-py3.10) PS C:\Users\User\Documents\project1> poetry install

Installing dependencies from lock file

Package operations: 0 installs, 17 updates, 0 removals


...


(project1-py3.10) PS C:\Users\User\Documents\project1>poetry show -v

Using virtualenv: C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\project1-lbkdIgRk-py3.10

...

(project1-py3.10) PS C:\Users\User\Documents\project1>cd C:\User\Documents\prj2

(project1-py3.10) PS C:\User\Documents\prj2>poetry show -v

Using virtualenv: C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\project1-lbkdIgRk-py3.10 

...


(project1-py3.10) PS C:\User\Documents\prj2> poetry install

Installing dependencies from lock file

Package operations: 0 installs, 16 updates, 0 removals

...

(project1-py3.10) PS C:\User\Documents\prj2>poetry show -v

Using virtualenv: C:\Users\User\AppData\Local\pypoetry\Cache\virtualenvs\project1-lbkdIgRk-py3.10

...

(project1-py3.10) PS C:\User\Documents\prj2>

Почему виртуальная среда не была изменена на новую виртуальную среду?


Ответы (1 шт):

Автор решения: roman

Проблема была в том, что subprocess позволяет запускать другие процессы только под своим окружением poetry под которым был запущен скрипт. Это можно решить добавив deactivate для деактивации уже имеющегося окружения в файл run.bat и poetry shell для активации нового окружения.

Также есть более элегантное решение, в котором используется модуль os

import os

bat_file_path = r'C:\путь\к\вашему\файлу\ваш_файл.bat'

# Запуск .bat файла
exit_code = os.system(bat_file_path)

# Проверка результата выполнения
if exit_code == 0:
    print("Файл успешно выполнен")
else:
    print(f"Ошибка при выполнении файла. Код завершения: {exit_code}")

Здесь нет необходимости напрягаться по поводу активации и деактивации виртуального окружения, так как эта команда запустит отдельный процесс со своим окружением

→ Ссылка