Есть приложение Django на VDS, которое работает, но при подключении .DLL возникает ошибка 'clr' has no attribute 'AddReference'
Не могу устранить ошибку:
module 'clr' has no attribute 'AddReference'
VDS Ubuntu22+Apache2 +Python3.10.9+ Django 4, 1, 5 +ip и доменное имя, все работает нормально, но мне нужно подключить dll (.net7.0)(dotnet build --runtime ubuntu.22.04-x64 --self-contained)- если вы подключаетесь к VDS через клиент Openssh, то .dll подключится в среде python3, которая там есть, но при загрузке страницы возникает ошибка
module 'clr' has no attribute 'AddReference'
единственное отличие, которое я заметил, заключается в том, что сайт выдает Python.version=3.10.6 (main, Nov 14 2022, 16:10:14) [ GCC 11.3.0], (import sys; sys.version) , когда я нахожусь в клиенте Openssh, он пишет 3.10.9 (main, Jan 24 2023, 10:16:41) [GCC 11.3.0], может быть, это какая-то причина?
вот что я имею за Traceback загрузки сайта :
Traceback (most recent call last):
File "/home/djangoexample4/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/djangoexample4/env/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/djangoexample4/mainapp/views.py", line 135, in index
clr.AddReference('/home/djangoexample4/btclinux2/MyLibraryName/bin/Debug/net7.0/ubuntu.22.04-x64/MyLibraryName.dll')
Exception Type: AttributeError at /
Exception Value: module 'clr' has no attribute 'AddReference'
если через openSSH client подключатся к VDS, то ни какой ошибки уже почемуто нет:
# monop -r /home/djangoexample4/btclinux2/MyLibraryName/bin/Debug/net7.0/ubuntu.22.04-x64/MyLibraryName.dll
Assembly Information:
MyLibraryName
Version=1.0.0.0
Culture=neutral
PublicKeyToken=null
MyLibraryName.Class1
Total: 1 types.
исходный C# (класс проекта classlib , созданного на vds dotnet-ом, и потом dotnet build --runtime ubuntu.22.04-x64 --self-contained, чтобы появился наш dll):
namespace MyLibraryName
{
public class Class1
{
public int method1()
{
return 777;
}
}
}
вот это при обращении через консоль на этом VDS:
# python3
>>> import clr
>>> clr.AddReference('/home/djangoexample4/btclinux2/MyLibraryName/bin/Debug/net7.0/ubuntu.22.04-x64/MyLibraryName.dll')
<System.Reflection.RuntimeAssembly object at 0x7f9c3b928640>
>>> from MyLibraryName import Class1
>>> variable = Class1().method1()
>>> print(variable)
777
вот это тоже делал:
pip uninstall clr
pip uninstall pythonnet
pip install pythonnet
функция dir() возвращает список имён, определяемых объектом:
dir(clr) через openSSH client:
['AddReference', 'FindAssembly', 'GetClrType', 'ListAssemblies', '__class__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_add_pending_namespaces', '_available_namespaces', '_extras', '_load_clr_module', 'clrmethod', 'clrproperty', 'getPreload', 'loader', 'setPreload']
dir(clr) при загрузке страницы:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'load']
Ответы (1 шт):
добавить WSGIApplicationGroup %{GLOBAL} в /etc/apache2/sites-enabled/youdomain.conf
<VirtualHost *:80>
. . .
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>
И это все заработало!