Как настроить и инициализировать Python.NET в консольном приложении C# в Linux, контейнеризированном с помощью Docker? ⇐ Linux
-
Anonymous
Как настроить и инициализировать Python.NET в консольном приложении C# в Linux, контейнеризированном с помощью Docker?
Я пытаюсь запустить консольное приложение C#/.NET, которое использует библиотеку Python.NET для интерпретации сценариев Python во время выполнения. Я хочу, чтобы это приложение работало в Linux с контейнером Docker.
Проблема, с которой я столкнулся, заключается в том, что Python.NET требует, чтобы вы инициализировали свойство Runtime.PythonDLL, указав путь к двоичному файлу библиотеки Python.
Ответ на этот пост заставляет меня подозревать, что я ищу файл с именем, например. libpython3.12.so.
Я создал файл docker (см. ниже), который устанавливает образ python:3 в виртуальную среду и копирует результат в мою конечную среду. Но я не вижу файла с именем libpython3.12.so. Если я попытаюсь предоставить исполняемый файл /app/python/bin/python (который существует), Python.NET выдаст исключение (см. ниже), которое файл не существуют.
Я не могу найти подробного руководства о том, как это сделать, оно существует?
Как мне настроить файл docker и какой путь к файлу libpython*.so мне следует назначить Runtime.PythonDLL?
Файл .docker:
ИЗ базы mcr.microsoft.com/dotnet/aspnet:7.0 AS РАБОЧИЙ ПАРАМЕТР/приложение РАЗВЕРНУТЬ 80 РАЗВЕРНУТЬ 443 ИЗ mcr.microsoft.com/dotnet/sdk:7.0 сборка AS РАБОЧИЙ ПАРАМЕТР /источник КОПИРОВАТЬ ["Farpoint.Service/Farpoint.Service.csproj", "Farpoint.Service/"] ЗАПУСТИТЕ восстановление dotnet "Farpoint.Service/Farpoint.Service.csproj" КОПИРОВАТЬ. . WORKDIR "/src/Farpoint.Service" ЗАПУСК сборки dotnet "Farpoint.Service.csproj" -c Release -o /app/build # НАЧАЛО Подготовьте среду Python ИЗ питона:3 как питон ЗАПУСК python -m venv /venv КОПИРОВАТЬ --from=build /app/build/python/requirements.txt . ВЫПОЛНИТЕ /venv/bin/python -m pip install -r требования.txt # END Подготовьте среду Python ИЗ сборки КАК опубликовать RUN dotnetPublish "Farpoint.Service.csproj" -c Release -o /app/publish /p:UseAppHost=false ИЗ базы AS окончательный РАБОЧИЙ ПАРАМЕТР/приложение КОПИРОВАТЬ --from=publish /app/publish . # НАЧАЛО Копировать среду Python КОПИРОВАТЬ --from=python/venv/app/python # END Копировать среду Python ENTRYPOINT ["dotnet", "Farpoint.Service.dll"] Исключение:
DllNotFoundException: не удалось загрузить /app/python/bin/python с флагами RTLD_NOW | RTLD_GLOBAL: /app/python/bin/python: невозможно открыть файл общего объекта: такого файла или каталога нет
Я пытаюсь запустить консольное приложение C#/.NET, которое использует библиотеку Python.NET для интерпретации сценариев Python во время выполнения. Я хочу, чтобы это приложение работало в Linux с контейнером Docker.
Проблема, с которой я столкнулся, заключается в том, что Python.NET требует, чтобы вы инициализировали свойство Runtime.PythonDLL, указав путь к двоичному файлу библиотеки Python.
Ответ на этот пост заставляет меня подозревать, что я ищу файл с именем, например. libpython3.12.so.
Я создал файл docker (см. ниже), который устанавливает образ python:3 в виртуальную среду и копирует результат в мою конечную среду. Но я не вижу файла с именем libpython3.12.so. Если я попытаюсь предоставить исполняемый файл /app/python/bin/python (который существует), Python.NET выдаст исключение (см. ниже), которое файл не существуют.
Я не могу найти подробного руководства о том, как это сделать, оно существует?
Как мне настроить файл docker и какой путь к файлу libpython*.so мне следует назначить Runtime.PythonDLL?
Файл .docker:
ИЗ базы mcr.microsoft.com/dotnet/aspnet:7.0 AS РАБОЧИЙ ПАРАМЕТР/приложение РАЗВЕРНУТЬ 80 РАЗВЕРНУТЬ 443 ИЗ mcr.microsoft.com/dotnet/sdk:7.0 сборка AS РАБОЧИЙ ПАРАМЕТР /источник КОПИРОВАТЬ ["Farpoint.Service/Farpoint.Service.csproj", "Farpoint.Service/"] ЗАПУСТИТЕ восстановление dotnet "Farpoint.Service/Farpoint.Service.csproj" КОПИРОВАТЬ. . WORKDIR "/src/Farpoint.Service" ЗАПУСК сборки dotnet "Farpoint.Service.csproj" -c Release -o /app/build # НАЧАЛО Подготовьте среду Python ИЗ питона:3 как питон ЗАПУСК python -m venv /venv КОПИРОВАТЬ --from=build /app/build/python/requirements.txt . ВЫПОЛНИТЕ /venv/bin/python -m pip install -r требования.txt # END Подготовьте среду Python ИЗ сборки КАК опубликовать RUN dotnetPublish "Farpoint.Service.csproj" -c Release -o /app/publish /p:UseAppHost=false ИЗ базы AS окончательный РАБОЧИЙ ПАРАМЕТР/приложение КОПИРОВАТЬ --from=publish /app/publish . # НАЧАЛО Копировать среду Python КОПИРОВАТЬ --from=python/venv/app/python # END Копировать среду Python ENTRYPOINT ["dotnet", "Farpoint.Service.dll"] Исключение:
DllNotFoundException: не удалось загрузить /app/python/bin/python с флагами RTLD_NOW | RTLD_GLOBAL: /app/python/bin/python: невозможно открыть файл общего объекта: такого файла или каталога нет
Мобильная версия