假设我的项目组织如下:
ProjectRoot/
__init__.py
test.py
A/
__init__.py
a_test.py
B/
__init__.py
b_test.py
并假设a_test取决于b_test。因此源代码相对简单:
#
# a_test.py
#
from B.b_test import b_test_class
class a_test_class:
def func(self):
print("a_test_class")
b_instance = b_test_class()
b_instance.func()
if __name__ == "__main__":
a_instance = a_test_class()
a_instance.func()
#
# b_test.py
#
class b_test_class:
def func(self):
print("b_test_class")
#
# test.py
#
from A.a_test import a_test_class
if __name__ == "__main__":
a_instance = a_test_class()
a_instance.func()
只要我启动test.py脚本,一切都按预期工作。 Python加载所有模块没有任何麻烦并执行它们。现在问题来了: 如何在没有test.py的情况下启动a_test.py? 所以,基本上,我想要实现的是cd到projectRoot / A并执行a_test.py。这导致导入错误:没有名为' B'
的模块目前,我已经能够创建一个具有以下结构的项目:
ProjectRoot/
customLibModuleA/
...
customLibModuleB/
...
mainApp.py
我想要创建的是:
ProjectRoot/
customLibModuleA/ #custom protocol implementation
...
customLibModuleB/ #custom logging functions
...
application1/ #server
...
application2/ #client
...
我如何期望管理复杂的项目?欢迎任何对项目结构化手册和样式指南的良好参考。
答案 0 :(得分:0)
这是我的时间解决方案,因为没有人提供pythonic方法。
文件夹结构如下:
ProjectRoot/
__init__.py
customLibModuleA/ #custom protocol implementation
__init__.py
...
customLibModuleB/ #custom logging functions
__init__.py
...
application1/ #server
__init__.py
__path_setup__.py
server.py
...
application2/ #client
__init__.py
__path_setup__.py
client.py
...
__path_setup__.py
内容为:
import sys
import os
os.sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
应用程序脚本在导入之前有一些设置代码(server.py):
#
#settings up the environment
#
if __name__ == "__main__":
exec(open("./__path_setup__.py").read())
#
# system and libraries imports
#
import customLibModuleA.whatever
...
仍然欢迎高质量的pythonic解决这个问题。