Подпроцесс, инициированный из блокнота Jupyter, не использует ту же виртуальную среду Python. Почему и как исправить?Python

Программы на Python
Anonymous
Подпроцесс, инициированный из блокнота Jupyter, не использует ту же виртуальную среду Python. Почему и как исправить?

Сообщение Anonymous »

Я выполняю скрипт Python как подпроцесс. Выполнение этого из обычного модуля наследует виртуальную среду, но когда я делаю это внутри блокнота Jupyter, подпроцесс использует системный Python. Почему это так и как я могу это исправить независимо от платформы? (Я не знаю, какие виртуальные среды будут использовать другие пользователи.)
Минимальный пример:
# kernel_printer.py
import sys
import os

def print_kernel():
kernel_name = os.path.basename(sys.executable.replace("/bin/python", ""))
print('Kernel: ', kernel_name)

if __name__ == '__main__':
print_kernel()

Код, который будет выполняться как скрипт или как ячейка блокнота:
import subprocess

print(subprocess.run(['python', 'kernel_printer.py'], capture_output=True))

# as module: subprocess output contains print of activated virtualenv
# as notebook cell: ... systemwide python is printed as current kernel


Обратите внимание, что ноутбук Jupyter действительно использует ту же виртуальную среду, что и модуль. То есть следующий код печатает имя виртуальной среды независимо от того, выполняется ли она в модуле или ячейке записной книжки.
import kernel_printer
kernel_printer.print_kernel()

# always prints name of virtual env


Подробнее здесь: https://stackoverflow.com/questions/786 ... on-virtual

Вернуться в «Python»