Как использовать Python virtualenv в .NET-проекте для процессов? - PullRequest
0 голосов
/ 21 мая 2018

Я работаю над веб-приложением в .net, используя бритвенные страницы в mvvm-модели.Я написал на Python сканер / анализатор, которым мне нужно управлять из моего .NET-проекта.Итак, я нашел еще одну запись stackoverflow , которая помогает мне решить эту проблему.

Чтобы поддерживать чистоту и организованность среды Python, я использовал virtualenv для отделения моих библиотек (BeautifulSoup4 и Requests) от моего глобального интерпретатора.Все получилось так, как я хотел.

Однако я дошел до того, что мне нужно соединить оба приложения.Поэтому я поместил свой парсер в отдельную папку в моем проекте .NET.Кроме того, всякий раз, когда моя форма проверяется и т. Д. И достигает моего OnPostAsync -метода, он запускает процесс, как описано в вышеупомянутом посте.

Но когда я нажимаю кнопку отправки, я вижу в консоли, что этоне могу найти правильные пакеты в моем приложении Python, так как я получаю знаменитый: ImportError: No module named 'bs4'. Мне известно, что эта ошибка известна и на нее уже давно даны ответы, но у меня другой вопрос .

Вопрос

Хотелось бы узнать, как исправить эту ошибку в отношении моего .NET-проекта и virualenv.То есть, есть ли способ использовать или связать мой virtualenv из Python в моем .NET-проекте?

Моя структура Python-project:

/app/
  /src/    <-- Source code
  /output/ <-- Not relevant
  /tests/  <-- Not relevant
  /venv/   <-- Installed libraries
  main.py  <-- Entrypoint application

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Должен быть файл /venv/Scripts/activate_this.py, который содержит код для активации venv в текущем интерпретаторе.Строка документа содержит:

Активировать virtualenv для текущего интерпретатора:

Использовать exec(open(this_file).read(), {'__file__': this_file}).

Это можно использовать, когда необходимо использовать существующий интерпретатор Python,не virtualenv bin / python.

Мой источник находится в родительском каталоге /venv/, поэтому я использую следующее для активации моего virtualenv.

import os

venv_activation_path = os.path.join(
    os.path.dirname(os.path.abspath(__file__)), 'venv', 'Scripts', 'activate_this.py')
exec(open(venv_activation_path).read(), {'__file__': venv_activation_path})
0 голосов
/ 21 мая 2018

Если я хорошо понял ваш вопрос, вы можете указать, с каким интерпретатором Python будет запускаться скрипт, изменив его первую строку, так же, как Bash:

#!/path/to/venv/bin/python 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...