我正在为一个项目创建文档,但在针对我的模块运行pydoc3
时遇到了一个奇怪的错误。SQLAlchemy
database
背景
项目布局:
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__.py
,pdoc3
则能够解析我的数据库模块,但是,不是database.models
(我明确转义,因为完成比完美更好)。
修改database.__init__.py
__pdoc__ = {'models': False}
from database.metadata import metadata
from database import methods
from database import models