几个月前,你开始从事一个随着时间的推移变大的小项目。它从一些python文件开始:
project
│ program_1.py
│ program_2.py
我们继续添加更多程序,因此为了避免代码重复,我开始提取常用函数来分隔文件。
project
│ program_1.py
│ program_2.py
│ program_3.py
│ shared_module_1.py
│ shared_module_2.py
我们不断添加更多程序并且它们具有相当大的尺寸,因此我将它们放在自己的文件夹中就像这样。另外要避免在项目文件夹中删除更多文件(这只是一个简化示例,文件夹有15个以上文件):
project
│ program_1.py
│ program_2.py
│ program_3.py
│ shared_module_1.py
│ shared_module_2.py
└───program_4
│ program_4.py
│ program_4_aux.py
为了让program_4.py使用共享模块,我必须使用以下语句:
sys.path.append('../')
我无法像这样跟上。代码变得混乱,难以维护。我不知道如何清理这个烂摊子。
PD:我尝试使用from .. import shared_module_1
,但它会告诉我parent module '' not loaded cannot perform relative import
非常感谢你的时间。
答案 0 :(得分:1)
去看看django的布局方式。
突出说明:
./django
。manage_translations.py
脚本通过导入使用一些django功能,但它位于./scripts
。脚本也应从不使用相对导入(因为脚本不在模块中!)sys.path
,那么您可能做错了。./django/db
用于处理数据库相关的功能。如果这样做得好,那么通用子模块(如果有的话)可以很容易地完全移动到一个单独的项目,如果这有用的话。所以建议将所有模块代码移到与程序代码分开的子目录中,例如:
project
module
__init__.py
module_1.py
module_2
__init__.py
submodule_a.py
scripts
program1.py
然后你只需要确保你的PYTHONPATH中有project
,你就能做到这一点。
from module.module_1 import Module1Class
等
答案 1 :(得分:-1)
最简单的解决方案是将您拥有程序的目录添加到PYTHONPATH环境变量中,如Permanently add a directory to PYTHONPATH
另一种解决方案是从共享模块的目录中调用程序:
python program_4/program_4.py
你应该看看 init .py文件,尽管不是解决方案。
第三个选项是将共享模块放在python库包中。