pythonnet / pythonnet/pythonnet

Trouble with pythonnet on docker/linux

Aperta
#1,346 8 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
C#
Stelle
5.5k
Fork
780
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Environment
  • Pythonnet version: 3.0.0-dev1 & 2.5.1
  • Python version: 3.8
  • Operating System: Ubuntu 20.04
  • .NET Runtime: 5
Details
  • Describe what you were trying to get done.

I am trying to run pythonnet via docker. The only requirements is executing a set of pytest tests from C# as well as possibly other python functions directly from C# code.

  • What commands did you run to trigger this issue? If you can provide a

Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:5.0-focal-amd64 AS build

ENV DEBIAN_FRONTEND noninteractive

RUN : \
    && apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        python3 python3-pip python3-dev python3-venv

RUN git clone https://github.com/pythonnet/pythonnet
WORKDIR /pythonnet
RUN python3 setup.py build_dotnet --inplace

RUN python3 -m pip install pytest

WORKDIR /source
COPY ./PyTestSelenium/ /pythonCode/

COPY *.csproj .
RUN dotnet restore

COPY . .
RUN dotnet run 

C# code

PythonEngine.Initialize();
         
var pyLock = PythonEngine.AcquireLock();
PythonEngine.ImportModule("pytest");
PythonEngine.ReleaseLock(pyLock);

.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <GenerateProgramFile>false</GenerateProgramFile>
  </PropertyGroup>
  <PropertyGroup>
    <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
  </PropertyGroup>
  <ItemGroup>
    <!--<PackageReference Include="pythonnet_netstandard_py38_linux" Version="2.5.1" />-->

    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
    <PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
    <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="87.0.4280.8800" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Python.Runtime">
      <HintPath>/pythonnet/pythonnet/runtime/Python.Runtime.dll</HintPath>
    </Reference>
  </ItemGroup>
</Project>
  • If there was a crash, please include the traceback here.
#16 [12/12] RUN dotnet run
#16 sha256:a55eb81183e53ed9529fc7015660b655097ddfaed37913105f34459c0d54941e
#16 4.371 Unhandled exception. Python.Runtime.PythonException: ImportError : /usr/lib/python3.8/lib-dynload/_contextvars.cpython-38-x86_64-linux-gnu.so: undefined symbol: PyContextVar_Type
#16 4.398 ['  File "/usr/local/lib/python3.8/dist-packages/pytest/__init__.py", line 42, in <module>\n    from _pytest.python_api import approx\n', '  File "/usr/local/lib/python3.8/dist-packages/_pytest/python_api.py", line 6, in <module>\n    from decimal import Decimal\n', '  File "/usr/lib/python3.8/decimal.py", line 8, in <module>\n    from _pydecimal import *\n', '  File "/usr/lib/python3.8/_pydecimal.py", line 440, in <module>\n    import contextvars\n', '  File "/usr/lib/python3.8/contextvars.py", line 1, in <module>\n    from _contextvars import Context, ContextVar, Token, copy_context\n']   at Python.Runtime.PythonException.ThrowIfIsNull(IntPtr ob) in /pythonnet/src/runtime/pythonexception.cs:line 261
#16 4.398    at Python.Runtime.PythonEngine.ImportModule(String name) in /pythonnet/src/runtime/pythonengine.cs:line 493
#16 4.398    at PythonNetIntegration.Program.Main(String[] args) in /source/PythonXunitTests.cs:line 119
#16 ERROR: executor failed running [/bin/sh -c dotnet run]: exit code: 134

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con il Dockerfile e il punto di ingresso C# forniti, quindi parti da PythonEngine.ImportModule in pythonengine.cs:493 e dal sito di chiamata in PythonXunitTests.cs:119. Usa il traceback per esaminare l’importazione di _contextvars di Python 3.8; il lavoro è completo quando pytest viene importato correttamente senza l’errore undefined PyContextVar_Type.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp, docker, python
Ambito
backend, devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.