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

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

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

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

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

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

15 ответов

25 просмотров

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

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 х)

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта