Django. Программа при запуске через manage.py не использует виртуальное окружение

Пишу бота для телеграмма и использованием Django. Бот запускается через файл tg_bot/management/commands/bot.py. При запуске команды через manage.py скрипт не видит виртуальную среду и выводит сообщение, что модуль не найден.

`Traceback (most recent call last):
  File "C:\Users\ivan\Documents\vs_code\eleshop\tg_bot_shop\tg_bot\bot.py", line 1, in <module>
    from utils import *
  File "C:\Users\ivan\Documents\vs_code\eleshop\tg_bot_shop\tg_bot\utils.py", line 10, in <module>
    from telegram import InputMediaPhoto
ModuleNotFoundError: No module named 'telegram'`

При этом, если запустить бота напрямую, то он работает нормально. Виртуальное окружение активировано. Использую VS Code. Изначально писал на Linux, и там всё работало нормально. Сейчас использую Windows и появилась эта проблема. python manage.py runserver работает нормально.

sys.path выводит ['C:\\Users\\ivan\\Documents\\vs_code\\eleshop\\tg_bot_shop\\tg_bot', 'C:\\Users\\ivan\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip', 'C:\\Users\\ivan\\AppData\\Local\\Programs\\Python\\Python311\\Lib', 'C:\\Users\\ivan\\AppData\\Local\\Programs\\Python\\Python311\\DLLs', 'C:\\Users\\ivan\\AppData\\Local\\Programs\\Python\\Python311', 'C:\\Users\\ivan\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages'] - здесь указано где python установлен глобально.

Пробовал переустановить Python и VS Code и его расширения. Сейчас в качестве костыля использую

import sys
import os
def setup_core_dir():
  core_dir  = os.path.dirname(os.path.dirname(__file__))
  sys.path.append(core_dir)
  sys.path.append(os.path.join(core_dir, 'venv', 'Lib', 'site-packages'))
  print(sys.path)
setup_core_dir()

Файл команды запуска (через manage.py): run_bot.py

from django.core.management.base import BaseCommand
import subprocess

class Command(BaseCommand):
  help = 'Запуск бота'

  def handle(self, *args, **options):
    path_to_bot = 'tg_bot/bot.py'
    subprocess.run(['python', path_to_bot])

Проблема была в запускающем скрипте. В нем использовалась команда python, что видимо указывало на использование глобального окружения. Заменил её на sys.executable, который указывает абсолютный путь к интерпретатору через который был запущен скрипт.

from django.core.management.base import BaseCommand
import subprocess
import sys
import os

class Command(BaseCommand):
  help = 'Запуск бота'

  def handle(self, *args, **options):
    path_to_bot = os.path.join('tg_bot', 'bot.py')
    path_to_python = sys.executable
    subprocess.run([path_to_python, path_to_bot])
Вернуться на верх