Reputation: 790
I have a Django service and I recently added OneLogin SSO in it. Everying is working fine on local machine, but on server, login view throws this ImportError on each request.
ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process.
The complete stacktrace is
Traceback (most recent call last):
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 172, in _get_response
resolver_match = resolver.resolve(request.path_info)
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/urls/resolvers.py", line 267, in resolve
for pattern in self.url_patterns:
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/urls/resolvers.py", line 310, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/django/urls/resolvers.py", line 303, in urlconf_module
return import_module(self.urlconf_name)
File "/.virtualenvs/dj/lib64/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 662, in exec_module
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "./service/urls.py", line 23, in <module>
from service.apps.onelogin_sso import views as onelogin_views
File "./service/apps/onelogin_sso/views.py", line 9, in <module>
from onelogin.saml2.auth import OneLogin_Saml2_Auth
File "/.virtualenvs/dj/local/lib/python3.5/site-packages/onelogin/saml2/auth.py", line 14, in <module>
import xmlsec
ImportError: Interpreter change detected - this module can only be loaded into one interpreter per process.
I am using python 3.5.1 with Django 1.11 and python3-saml
for SSO.
The machine is on AWS using amazon AMI.
Upvotes: 1
Views: 2697
Reputation: 790
It turned out, we are using uwsgi with threads and each thread is creating its own interpreter.
All we had to do is to update uwsgi app's ini file
to use single interpreter.
single-interpreter = True
Upvotes: 3