0

我正在为一个项目创建文档,但在针对我的模块运行pydoc3时遇到了一个奇怪的错误。SQLAlchemydatabase

背景

项目布局:

PROJECT_NAME/
|-- __init__.py
|
|-- api
|   |-- main.py
|
|-- database
|   |-- __init__.py
|   |-- metadata.py
|
|   |-- methods
|       |-- __init__.py
|       |-- foo.py
|
|   |-- models
|       |-- __init__.py
|       |-- base.py
|       |-- models.py
|
| - tests
|   |-- test_this.py
...

生成文档的命令:模块的名称在
哪里...MODULE

python3 venv/bin/pdoc3 --html --output-dir docs $MODULE

问题:

我能够为每个模块生成文档,一次一个,没有问题。
(例如python3 venv/bin/pdoc3 --html --output-dir docs database:)

但是当我尝试为整个项目( MODULE='.') 生成文档时,我收到以下错误:

ImportError:导入“PROJECT_NAME.database”时出错:

InvalidRequestError:已经为此 MetaData 实例定义了表“FooBar”。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。


这个错误的奇怪之处在于我有一个完整的测试套件,完全没有问题。此外,发生的错误database.__init__.py对我来说根本没有意义。


尽可能的解决方案:

我的想法是我的问题来自我如何配置我的declarative base...

内容database.__init__.py

from .metadata import metadata
from . import methods
from . import models

内容database.metadata.py

from sqlalchemy import MetaData
metadata = MetaData()

内容database.models.base.py

from database import metadata
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(metadata=metadata)

内容database.models.model.py

from database.models import Base
from sqlalchemy import Column, Integer, String

class FooBar(Base):

    __tablename__ = 'foo_bar'
    __table_args__ = {
        'comment': 'Example...'
    }

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(80), nullable=False, unique=True)

从根调用时,pydoc 是否有可能尝试创建我的模型两次?

我在这里完全不知所措,不确定使用什么资源来进一步调查。


更新:

按照这个答案作为 inspa,如果我更新 , 的格式database.__init__.pypdoc3则能够解析我的数据库模块,但是,不是database.models (我明确转义,因为完成比完美更好)

修改database.__init__.py

__pdoc__ = {'models': False}

from database.metadata import metadata
from database import methods
from database import models
4

0 回答 0