Вызовите скрипт в потоке с другим интерпретатором python3 - PullRequest
1 голос
/ 25 февраля 2020

У меня есть скрипт, который я выполняю с одним переводчиком (из одного венва). Мне нужно вызвать другой сценарий в потоке с другим интерпретатором (также venv), но по какой-то причине он дает мне

ModuleNotFoundError: No module named 'module_name'

Пока я делаю это так:

th = threading.Thread(target=os.system, args=(params,))
th.start()

Я пытался установить зависимости интерпретатора вызываемого абонента в зависимости от вызывающего абонента.

Я также пытался добавить

source /path/to/venv/bin/activate;

в params, но ни один из них не помог мне.

Я тоже пытался сделать

sys.path.append('/path/to/the/caller/script')

Но эффекта не было. Любые идеи, как это исправить?

обн. Добавленный пример:

# caller.py
import threading
import os

th = threading.Thread(target=os.system, args=('/path/to/flask/app.py',))
th.start()

# callee.py
#!/usr/bin/python3

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

Если вы выполните caller.py с чистым интерпретатором python3, у вас будет

Traceback (most recent call last):
    File "/path/to/flask/app.py", line 3, in <module>
from flask import Flask
    ModuleNotFoundError: No module named 'flask'

, поскольку в нем нет flask вызывающий venv

...