首页 > 编程问答 >在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时

在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时

时间:2024-07-23 13:23:43浏览次数:8  
标签:python c# .net docker python.net

屏幕截图

我不断收到此错误:

RuntimeError: Failed to create a default .NET runtime, which would
                    have been "mono" on this system. Either install a
                    compatible runtime or configure it explicitly via
                    `set_runtime` or the `PYTHONNET_*` environment variables
                    (see set_runtime_from_env).

我有我的 docker 文件,但没有指定任何运行时。这是问题吗?

ARG PYTHON_VERSION=3.10
FROM python:${PYTHON_VERSION}-slim as base

# Prevents Python from writing pyc files.
ENV PYTHONDONTWRITEBYTECODE=1

# Keeps Python from buffering stdout and stderr to avoid situations where
# the application crashes without emitting any logs due to buffering.
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/go/dockerfile-user-best-practices/
ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/nonexistent" \
    --shell "/sbin/nologin" \
    --no-create-home \
    --uid "${UID}" \
    appuser

# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.
# Leverage a bind mount to requirements.txt to avoid having to copy them into
# into this layer.
RUN --mount=type=cache,target=/root/.cache/pip \
    --mount=type=bind,source=requirements.txt,target=requirements.txt \
    python -m pip install -r requirements.txt

# Switch to the non-privileged user to run the application.
USER appuser

# Copy the source code into the container.
COPY . .

# Expose the port that the application listens on.
EXPOSE 5491

# Run the application.
CMD python src/main.py

我尝试使用 docker 使用 pythonnet 运行我的项目。所以我可以使用英镑交易者 API。


问题在于的 Docker 映像中没有安装 .NET 运行时。Pythonnet 需要一个 .NET 运行时(如 Mono 或 .NET Core)才能工作,因为它充当 Python 和 .NET 代码之间的桥梁。

可以通过以下两种方式之一解决此问题:

1. 使用基于 Mono 的映像:

  • 将的基础映像更改为包含 Mono 的映像。 可以使用官方的 Mono 映像作为基础:

    dockerfile FROM mono:<mono_version>-slim AS base

    <mono_version> 替换为要使用的 Mono 版本(例如, latest 或特定版本号)。

  • 安装 Python 和 Pythonnet。

    dockerfile RUN apt-get update && \ apt-get install -y python3 python3-pip && \ pip install pythonnet

2. 使用基于 .NET SDK 的映像并安装 Python:

  • 将的基础映像更改为包含 .NET SDK 的映像。 可以使用官方的 .NET SDK 映像作为基础:

    dockerfile FROM mcr.microsoft.com/dotnet/sdk:<sdk_version> AS base

    <sdk_version> 替换为要使用的 .NET SDK 版本(例如, 6.0 7.0 )。

  • 安装 Python 和 Pythonnet。

    dockerfile RUN apt-get update && \ apt-get install -y python3 python3-pip && \ pip install pythonnet

  • (可选)如果使用的是 Linux 以外的操作系统,请在 Dockerfile 中设置 PYTHONNET_RUNTIME_TYPE 环境变量:

    dockerfile ENV PYTHONNET_RUNTIME_TYPE=dotnet

完成上述任一步骤后,构建并运行的 Docker 映像,Pythonnet 应该能够找到并使用 .NET 运行时。请记住更新 Dockerfile 中的其余部分,以反映选择的运行时和任何其他依赖项。

标签:python,c#,.net,docker,python.net
From: 78382307

相关文章

  • Python 在模块中使用变量
    如何将一个文件中声明的变量调用到另一个文件中?大家好我已经在file1中声明了我的变量。我的函数位于file2中,它使用该变量。如何调用主文件中声明的变量。提前致谢当然可以!以下是如何在Python中跨文件使用变量:file1.py(包含变量的文件)#在file1.p......
  • 易优CMS模板标签adv广告列表每3条记录输出如下html元素
    【基础用法】标签:adv描述:获取广告列表内容。用法:{eyou:advpid='1'loop='3'}<ahref='{$field.links}'><imgalt='{$field.title}'src='{$field.litpic}'/></a>{/eyou:adv}属性:pid=''广告位置IDloop='......
  • VMware Live Site Recovery 9.0.1 - 数据中心灾难恢复 (DR)
    VMwareLiveSiteRecovery9.0.1-数据中心灾难恢复(DR)VMwareSiteRecoveryManager,VMwareSRM现已更名为VMwareLiveSiteRecovery请访问原文链接:https://sysin.org/blog/vmware-live-site-recovery-9/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwa......
  • Docker安装与使用
    Docker是一种开源的容器化技术,它使得开发者可以打包应用及其依赖项到一个标准化的单元(称为容器)中。Docker容器可以在任何环境中一致地运行,应用程序运行在虚拟容器里,如同在真实物理机上运行一样。Docker官网:https://www.docker.com/容器与虚拟机的区别:虚拟机:每个虚拟机都包......
  • Python 类型提示和 linter
    我一直在向我们的python项目添加静态类型检查,例如像这样:fromtypingimportListfromsomethingimportMyOtherClassclassMyClass:def__init__(self)->None:self.some_var=None#type:List[MyOtherClass]但是,现在我们使用的linter(flake8和......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......
  • 易优cms数据库执行中途失败,请第一时间请求技术支持,否则将影响后续的版本升级!
    应该是太早的版本升级到最新版本的缘故。可以看了下这篇文章《易优系统升级数据库执行中途失败解决办法》问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开......
  • VMware vCenter Server 8.0U3a - 集中式管理 vSphere 环境
    VMwarevCenterServer8.0U3a-集中式管理vSphere环境ServerManagementSoftware|vCenter请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u3/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer是一款高级服务器管理软件,提供了一......
  • 易优CMS网站screening筛选标设置与调用标签
    {eyou:screeningid='field'currentstyle='active'addfields='danxuan'alltxt='不限'}<divclass='row'><divclass='filter-box'>{eyou:volistname='$field.list'id='vo&......
  • 运行 python 3 代码时出现 python 2 语法错误
    我有一个如下所示的类classExperimentResult(BaseDataObject):def__init__(self,result_type:str,data:dict,references:list):super().__init__()self.type=result_typeself.references=referencesself.data=data......