Как мне вызвать скрипты Python с пакетами из IronPython? - PullRequest
1 голос
/ 02 октября 2019

Как бы я пришел к реализации скрипта Python, который требует внешних модулей (таких как BeautifulSoup4 и запросы) в моем проекте C #? Я хочу вызвать функцию в скрипте Python, но она продолжает вызывать у меня «IronPython.Runtime.Exceptions.ImportException:« Запросы без имени модуля ». У меня нет сценария IronPython, потому что я использую сценарий Python, созданный другим пользователем. У меня есть виртуальная среда, настроенная на Python для импорта необходимых модулей.

Я понятия не имею, где к этому подойти. Я просмотрел несколько сайтов, но все они требуют от меня написания скрипта IronPython. Нет ли других вариантов вызова функций, кроме настройки необходимого скрипта?

C # Код:

        static dynamic pythonFile;
        static void Main(string[] args)
        {
            // Loading Python file
            var ipy = Python.CreateRuntime();
            pythonFile = ipy.UseFile("test.py"); //throws error when this launches.

            DisplayMain();

            Console.ReadKey();
        }

Код Python (например, небольшой фрагмент):

import requests

def get_stock(stock_name, price_metric):
    print(stock_name + " " + price_metric)

def get_industry_indicators(startTime, endTime):
    print(startTime + " " + endTime)

def get_market_cap(industry, startTime, endTime):
    print(industry + " " + startTime + " " + endTime)

def get_headers(link):
    print(requests.get(link))

Я хочу иметь возможность вызывать мою функцию python (get_headers), передавать ссылку и затем печатать ее на моей консоли C #. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 02 октября 2019

Я нашел ошибку. Пути поиска для необходимых модулей должны быть включены. Вот пример.

            var engine = Python.CreateEngine();
            var searchPaths = new List<string>();
            searchPaths.Add(AppDomain.CurrentDomain.BaseDirectory + @"\Lib\site-packages");
            searchPaths.Add(@"C:\...\projectName\Lib\");
            engine.SetSearchPaths(searchPaths);

            engine.ExecuteFile("test.py");
...