我正在使用wxPython框架开发一个相当复杂的桌面应用程序。此时,app已经包含了许多模块:库,UI模块,util模块。
项目如下:
MyApp/
__init__.py -- empty
main.py
util/
__init__.py -- empty
lib1/
__init__.py
lib2/
__init__.py
gui/
__init__.py -- empty
window1.py
不幸的是,对于当前的项目结构,我无法使用绝对导入,因为python MyApp/main.py
将失败并出现ImportError: No module named MyApp.gui
为了解决这个问题,我想将MyApp作为可执行程序包:
my_app/
__init__.py -- empty
__main__.py
util/
__init__.py -- empty
lib1/
__init__.py
lib2/
__init__.py
gui/
__init__.py -- empty
window1.py
现在可以使用python -m my_app
到目前为止一切似乎都很好......但我充满怀疑,因为没有人使用这种方法。如果你看一下wxPython附带的demo,你会发现它主要是平面项目。
我绝对不是最聪明的人因此我错过了一些简单而明显的原因,为什么没有人使用这种方法。
也许我应该坚持使用子文件夹或平面项目结构?也许绝对进口不值得这样改变?
答案 0 :(得分:2)
如果我是你,我会看一下那里的一些wxPython应用程序,看看他们是如何做到的。
甚至是wxPython演示包。
答案 1 :(得分:2)
将大部分内容放在包命名空间中是最好的方法,因为您还可以利用字节码缓存和setuptools / Distribute可以轻松安装它。然后,您只需提供一个简单的顶级脚本来加载主模块并运行它。
类似的东西:
#!/usr/bin/python
import sys
from MyApp import main
main.main(sys.argv)
只需将myapp
命名为/ usr / local / bin(或PATH上的某个位置)即可。它只是导入主模块并运行main函数(或类)。
答案 2 :(得分:1)
你似乎明白为什么把它放在一个包装下是件好事。所以我想我会简单地回顾一下:
我将给你一些使用这种方法的例子,我认为主要是针对插件的方法:
我能想到的不仅仅是,我相信我已经在其他地方看到了它。