赞
踩
这是我的文件夹结构:storage/
__init__.py - contains class StorageAbstract, class DummyStorage, class STORE_TYPE
file.py - contains class FileStorage
db/
__init__.py - contains class DbStorage, class DbStorageAbstract
pg.py - contains class PgStorage
sqlite.py - contains class SQLiteStorage
类PgStorage和SQLiteStorage继承自DbStorageAbstract,因此我需要导入它。我是这样做的py.页以及sqlite.py)公司名称:
^{pr2}$
这就产生了以下错误:ImportError: cannot import name 'DbStorageAbstract'
但是,当我将DbStorageAbstract从存储/db/\uu init_upy中移动时。到storage/\uyu init_upy并按如下方式导入:from .. import DbStorageAbstract
那就好了。我已经阅读了this,this和许多其他资源,但是仍然不能找出是什么导致了这个问题。如果这是循环依赖,那么把类移到另一个文件中对我来说没有帮助。在
如果需要更多信息,请在评论中告诉我,我会编辑问题。在
我使用的是python3.5
编辑:
虽然这个问题被认为是this question的可能重复,但我不明白它如何回答我的问题。与另一个问题不同,我已经在每个文件夹中有init文件。如果我错了,请指出我能找到答案的地方。在
编辑2:
这是db/init.py文件:##################################################################
# Copyright 2018 Open Source Geospatial Foundation and others #
# licensed under MIT, Please consult LICENSE.txt for details #
##################################################################
#import sys
#sys.path.append("/mnt/c/Users/Jan/Documents/GitHub/pywps")
import logging
from abc import ABCMeta, abstractmethod
from pywps import configuration as config
from .. import StorageAbstract
from . import sqlite
from . import pg
LOGGER = logging.getLogger('PYWPS')
class DbStorageAbstract(StorageAbstract):
"""Database storage abstract class
"""
__metaclass__ = ABCMeta
@abstractmethod
def store(self, output):
pass
@abstractmethod
def store_output(self, file_name, identifier):
pass
class DbStorage(StorageAbstract):
def __init__(self):
self.storage = self.get_db_type()
def store(self, output):
assert(self.storage is not None)
self.storage.store(output)
def get_db_type(self):
# get db_type from configuration
try:
db_type = config.get_config_value('db', 'db_type')
except KeyError:
raise exception("Database type has not been specified")
# create an instance of the appropriate class
if db_type == "PG":
storage = pg.PgStorage()
elif db_type == "SQLITE":
storage = sqlite.SQLiteStorage()
else:
raise exception("Unknown database type: '{}'".format(db_type))
return storage
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。