我正在编写一个Python(Python3)应用程序(不是包),并且对正确的目录结构有一些疑问。目前我有这个:
myapp/
__init__.py
launch.py
core/
__init__.py
some_core_class.py
other_core_class.py
gui/
__init__.py
some_gui_class.py
other_gui_class.py
我希望从我的目录结构中的任何位置使用python launch.py
启动应用程序 - 当然要预先设置launch.py
的正确路径,例如python myapps/myapp/launch.py
。 some_core_class.py
。
在我的模块中,我使用绝对导入,例如在from myapp.core.other_core_class import OtherCoreClass
我写launch.py
。我在from myapp.core.some_core_class import SomeCoreClass
中使用相同的方法,例如myapp
。
然后通过编写python launch.py
直接从dir ImportError: No module named 'myapp'
启动它会导致launch.py
。我发现我可以通过将from core.some_core_class import SomeCoreClass
中的导入更改为myapp
来使其工作,但这似乎不是正确的绝对导入,并且与其他文件中的导入不一致。
解决问题的最佳方法是什么?我想避免将PATH
添加到UITableView
环境变量,这需要用户或安装程序进行手动编辑。我应该如何更改我的代码或导入以使应用程序可以从任何地方启动?这甚至可能吗?
答案 0 :(得分:0)
我刚刚发现,我可以通过预先
来解决它import os
import sys
app_parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(app_parent_dir)
在launch.py
的最开始。但这太丑了,感觉就像一个黑客。肯定有更好的办法。 Python不应该是丑陋的。等待更好的答案...