Skip to content

ModuleNotFoundError in .Net Core 3.1 despite setting runtime #1473

Closed
@deanmsands3

Description

@deanmsands3

Environment

  • Pythonnet version: 3.0.0.dev1 - 12027ad
  • Python version: 3.9.5 (via Conda)
  • Operating System: Windows 10
  • .NET Runtime: netcoreapp3.1

Details

  • Trying to run the CalcTest example in .Net Core 3.1
  • Python can't find CalcTestNS

calculate.cs:

namespace CalcTestNS
{
    public class calculate
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
        public int Sub(int a, int b)
        {
            return a - b;
        }
    }
}

CalcTest.csproj: (added line for GenerateRuntimeConfigurationFiles)

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <Platforms>AnyCPU;x64</Platforms>
  </PropertyGroup>
</Project>

CalcTest.runtimeconfig.json

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    }
  }
}

CalcTestNS does exist in CalcTest
CalcTestIlDasm

My Python Code:

from pythonnet import set_runtime
from clr_loader import get_coreclr
import os
bin_path = r"C:\Workspaces\C#\CalcTest\bin\x64\Debug\netcoreapp3.1"
assembly_name = "CalcTest"
rt_config_path = os.path.join(bin_path, f"{assembly_name}.runtimeconfig.json")
runtime = get_coreclr(rt_config_path)
set_runtime(runtime)
import clr
import sys
from pprint import pprint
import System
from System.Reflection import Assembly


sys.path.append(bin_path)
this_clr_find = clr.FindAssembly("CalcTest")
print(this_clr_find)
this_clr_module = clr.AddReference("CalcTest")
print(this_clr_module)
test = Assembly.GetReferencedAssemblies(this_clr_module)
print('Dependencies:')
[print(i) for i in test]
print('\nLoaded:')
[print(i) for i in clr.ListAssemblies(1)]

print("########")
clr_module_list = this_clr_module.GetLoadedModules()
for loaded_clr_module in clr_module_list:
    print(loaded_clr_module)

print("########")
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
pprint(allmodules)

print("########")
from CalcTestNS import calculate

calc = calculate()
add_result = calc.Add(1,2)
sub_result = calc.Sub(1,2)
print(f"1 + 2 = {add_result}")
print(f"1 - 2 = {sub_result}")
  • Output:
C:\Workspaces\C#\CalcTest\bin\x64\Debug\netcoreapp3.1\CalcTest.dll
CalcTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Dependencies:
System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

Loaded:
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
clrmodule, Version=2.5.2.0, Culture=neutral, PublicKeyToken=null
Python.Runtime, Version=2.5.2.0, Culture=neutral, PublicKeyToken=null
System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
__CodeGenerator_Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
e__NativeCall_Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
CalcTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
########
CalcTest.dll
########
[<module 'os' from 'C:\\Dev\\Anaconda3\\envs\\CNet\\lib\\os.py'>,
 <module 'sys' (built-in)>,
 <module 'pprint' from 'C:\\Dev\\Anaconda3\\envs\\CNet\\lib\\pprint.py'>,
 <module 'clr' from 'C:\\Dev\\Anaconda3\\envs\\CNet\\lib\\site-packages\\clr.pyd'>,
 <module 'System'>]
########
Traceback (most recent call last):
  File "C:\Workspaces\Python\PythonNetTest\main.py", line 38, in <module>
    from CalcTestNS import calculate
ModuleNotFoundError: No module named 'CalcTestNS'

Additional Notes:

  • Originally attempted in vanilla Python 3.9 venv. Ran into cffi errors. Switched to Conda.
  • Built pythonnet and clr-loader from source
  • Ran pytest on both with acceptable results (removed test_mono from clr-loader test)
  • Ran pytest --runtime=netcore on pythonnet successfully
  • Had to set PYTHONHOME environment variable to fix missing encodings issue during pytest.
  • clr-loader would not install except when built as wheel and installed via pip (which installed a bad version of cffi)
  • Had to use the cffi package from Conda since PyPi's (and built from source) is throwing "_cffi_backend not found."

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions