如何安排用SQLAlchemy和图形界面制作的应用程序的源代码?

Est*_*ber 6 python version-control sqlalchemy directory-structure

我正在使用SQLAlchemy和wxPython开发一个应用程序,我试图将其分布在由业务逻辑,ORM和GUI组成的独立模块中.

我不完全确定如何以pythonic的方式做到这一点.

鉴于mapping()必须在其他地方调用以供使用的对象,我想把它放在__init__.py业务逻辑上,但将所有表定义保存在一个单独的orm.py模块中.

我应该保留以下内容:

/Business
    /__init__.py
    |    mapping (module1.Class1, orm.table1)
    |
    /module1.py
         Class1

/orm.py
     import
     table1 = Table()
/GUI
    /main.py
    |    import business
    /crud.py
Run Code Online (Sandbox Code Playgroud)

或类似的东西

/Business
    /__init__.py
    |    import
    |
    /module1.py
         Class1
         table1 = Table()
         mapping (module1.Class1, orm.table1)

/GUI
    /main.py
    |    import business
    /crud.py
Run Code Online (Sandbox Code Playgroud)

是第一种推荐的方法吗?还有其他选择吗?我已经看到了第二种方式,但我不喜欢将数据库处理代码和业务逻辑代码放在同一个模块中.我是否在思考它?真的不是那么大的问题吗?

nos*_*klo 5

我发现Jp Calderone的这篇文章是关于如何(不)构建你的python项目的一个很好的提示.在它之后你将不会有问题.我将在这里重现整个文本:

Python项目的文件系统结构

:

  • 将目录命名为与项目相关的内容.例如,如果您的项目名为" Twisted ",请为其源文件命名顶级目录Twisted.执行发布时,应包含版本号后缀:Twisted-2.5.
  • Twisted/bin如果有的话,创建一个目录并将可执行文件放在那里..py 即使它们是Python源文件,也不要给它们扩展.除了导入和调用项目中其他地方定义的main函数之外,不要在其中添加任何代码.
  • 如果您的项目可以表示为单个Python源文件,那么将其放入目录并将其命名为与项目相关的内容.例如, Twisted/twisted.py.如果您需要多个源文件,请改为创建一个包(Twisted/twisted/,使用空 Twisted/twisted/__init__.py)并将源文件放入其中.例如, Twisted/twisted/internet.py.
  • 将您的单元测试放在包的子包中(注意 - 这意味着上面的单个Python源文件选项是一个技巧 - 您总是需要至少一个其他文件用于您的单元测试).例如, Twisted/twisted/test/.当然,让它成为一个包 Twisted/twisted/test/__init__.py.将测试放在像 Twisted/twisted/test/test_internet.py.
  • 添加Twisted/README和T wisted/setup.py分别解释和安装你的软件,如果你感觉很好.

不要:

  • 将您的源放在名为src或的目录中lib.这使得在没有安装的情况下很难运行.
  • 把你的测试放在你的Python包之外.这使得难以针对已安装的版本运行测试.
  • 创建一个只包含a __init__.py然后将所有代码放入的包__init__.py.只需制作一个模块而不是一个包,它就更简单了.
  • 尝试提出神奇的黑客攻击,使Python能够导入您的模块或包,而无需用户将包含它的目录添加到其导入路径(通过PYTHONPATH或其他一些机制).您将无法正确处理所有情况,当您的软件无法在其环境中工作时,用户会对您生气.

  • 这似乎是一个很好的一般建议,但似乎并没有完全回答原始问题. (2认同)