Dhirendra
Dhirendra

Reputation: 790

ImportError: Interpreter change detected while importing xmlsec

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

Answers (1)

Dhirendra
Dhirendra

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

Related Questions