Closed
Description
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
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
Labels
No labels