У меня действительно странная ошибка. В моем проекте используется следующий сегмент кода:
from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
def get_instance(cls):
return cls._instances[cls]
class SessionManager(object, metaclass=Singleton):
_engines = {}
_db_config = {}
def __init__(self, db_config: dict, **kwargs):
"""
Parent initializer. Takes SQLAlchemy database config parameters.
:param db_config: Database config, consisting of known SQLAlchemy
config key/values
:type db_config: dict
:return: self
"""
self._engine = None
self._engine_string = None
self._db_config = db_config
...
...
Когда я запускаю с Python 3.5 в macOS, он работает. Однако, когда я переношу проект на Ubuntu 18.04 и запускаю его с Python 3.6, он жалуется на синтаксическую ошибку:
Traceback (most recent call last):
File "run.py", line 5, in <module>
from views import default
File "/home/john/p/a/views/default.py", line 11, in <module>
from utils.TaskManagerQueue import TaskManagerQueue
File "/home/john/p/a/utils/TaskManagerQueue.py", line 5, in <module>
from utils.SessionManager import SessionManager
File "/home/john/p/a/utils/SessionManager.py", line 19
class SessionManager(object, metaclass=Singleton):
^
SyntaxError: invalid syntax
Я поискал в Интернете и подтвердил, что множественное наследование классов class SessionManager(object, metaclass=Singleton)
верное. . Что здесь может быть не так?