问题描述
我正在使用 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
...
python3 venv/bin/pdoc3 --html --output-dir docs $MODULE
问题:
我能够为每个模块生成文档,一次一个,没有问题。
(例如:python3 venv/bin/pdoc3 --html --output-dir docs database
)
但是当我尝试为整个项目生成文档 (MODULE='.'
) 时,我收到以下错误:
导入错误:导入“PROJECT_NAME.database”时出错:
InvalidRequestError:已为此 MetaData 实例定义了表 'FooBar'。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。
这个错误的奇怪之处在于我有一个完整的测试套件,其中根本没有问题。此外,错误发生在 database.__init__.py
中,这对我来说根本没有意义。
尽可能的解决方案:
我的想法是我的问题来自于我如何配置我的 declarative base
...
from .Metadata import Metadata
from . import methods
from . import models
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 是否可能尝试创建两次我的模型?
我在这里完全不知所措,不知道要使用什么资源来进一步调查。
更新:
在 this answer as inspa 之后,如果我更新 database.__init__.py
的格式,pdoc3
能够解析我的数据库模块,但是,而不是 database.models
(我明确转义,因为完成胜于完美)。
__pdoc__ = {'models': False}
from database.Metadata import Metadata
from database import methods
from database import models
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)