170 похожих чатов

Попробую здесь задать вопрос, а то в бегиннерсах тишина по

этому поводу :)

Господа, вопрос следующий.

Есть питоновый скрипт с загруженной версией библиотеки=2x, внутри которого через subprocess запускается другой питоновый скрипт , с другим венвом в котором установлена и грузится версия 1x.
Все проходит хорошо, ровно до того момента, пока не юзается встроенный метод в этой либе, которая проверяет, какая версия загружена, и т.к. 2х была запущена родительским скриптом, то в дочернем показывает что актуальная версия 2х.

Соответственно вопрос, как одним питоновым скриптом, запускать другой питоновый скрипт в другом венве, но чтобы библиотеки загруженные первым скриптом туда не протекали? :)

15 ответов

15 просмотров

Это что-то очень странное Оно на самом деле так работает?

Usefff- Автор вопроса
Андрей
Это что-то очень странное Оно на самом деле так р...

короче сейчас объясню, речь о TensorFlow. У меня крутится фласкапи с загруженным TF2, выполняются всякие задачки и т.п. И вот понадобилось на один из методов повесить TF1, я соответственно делаю свежий венв, в него устанавливаю нужные версии. Запускаю этот скрипт вызывая через subprocess, с указанием пути до нужного питона/венва. В одном из скриптов TF1 есть что-то типа if tf_version.is_tf2(): И он возвращает True, соответственно все идет не так как надо :)

Usefff
короче сейчас объясню, речь о TensorFlow. У меня ...

Интересно А внутрь метода не заглядывал – как он получает версию?

а как запускаешь?

Usefff- Автор вопроса
Denis Pobedrya
а как запускаешь?

cmd_list = [ '/home/ubuntu/tf1_venv/bin/python3', inference_script_path, '--input_type=image_tensor', f'--pipeline_config_path={config_file_path}', f'--output_directory={output_folder}', f'--trained_checkpoint_prefix={last_model_path}' ] print(f'Start creating frozen graph') send_message(subprocess.run(cmd_list, stdout=subprocess.PIPE))

Usefff
cmd_list = [ '/home/ubuntu/tf1_venv/bin/py...

хм, ну, выглядит разумно (если tf1_venv действительно первый тф). Значит ТФ какое-то сильное колдунство делает

Denis Pobedrya
хм, ну, выглядит разумно (если tf1_venv действител...

Вот я и грю в метод залезть надо посмотреть

Usefff- Автор вопроса
Denis Pobedrya
хм, ну, выглядит разумно (если tf1_venv действител...

ubuntu@ip-172-31-6-57:~/dev/MLdev$ source ~/tf1_venv/bin/activate (tf1_venv) ubuntu@ip-172-31-6-57:~/dev/MLdev$ python Python 3.6.9 (default, Mar 15 2022, 13:55:28) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf >>> tf.__version__ '1.15.5'

Usefff
ubuntu@ip-172-31-6-57:~/dev/MLdev$ source ~/tf1_ve...

а чтоб первый скрипт запустить, активейт делаешь? Он просто и PATH меняет и может ещё что

Usefff- Автор вопроса
Андрей
Вот я и грю в метод залезть надо посмотреть

from tensorflow.python import tf2 # pylint: disable=import-outside-toplevel def is_tf1(): """Whether current TensorFlow Version is 1.X.""" return not tf2.enabled() def is_tf2(): """Whether current TensorFlow Version is 2.X.""" return tf2.enabled() нашел метод, но если сделать вот так: >>> from tensorflow.python import tf2 >>> tf2.enabled() False То есть к венву вопросов нет, он реально чистый и рабочий.

Usefff- Автор вопроса
Denis Pobedrya
а чтоб первый скрипт запустить, активейт делаешь? ...

скорее всего где-то здесь собака порылась :)

Usefff
from tensorflow.python import tf2 # pylint: disab...

А попробуй без активации сделать так

Usefff- Автор вопроса
Андрей
А попробуй без активации сделать так

ubuntu@ip-172-31-6-57:~$ python3 Python 3.6.9 (default, Mar 15 2022, 13:55:28) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from tensorflow.python import tf2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'tensorflow' Тоже все чистое :) Скорее всего с PATH действительно, потому что в родительском скрипте много где добавляются значения туда

Usefff
ubuntu@ip-172-31-6-57:~$ python3 Python 3.6.9 (def...

ну, у subprocess.run есть параметр про переменные окружения

Denis Pobedrya
ну, у subprocess.run есть параметр про переменные ...

Осталось как-то их динамически вытаскивать из другого venv х)

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта