我想拥有以下项目的结构;逻辑在驻留在src
中的模块和驻留在apps
中的应用程序中实现。
my_project/
├── apps
│ ├── __init__.py
│ └── app.py
└── src
├── __init__.py
└── code.py
我的目标是能够从命令行执行app.py
(将my_project
作为当前目录)。
目前,我所做的是在app.py
中添加以下内容:
import sys
sys.path.insert(0, '.')
from src import code
import click
@click.command()
@click.option('--input', '-i', type=click.STRING)
def cli(input):
print(code.my_func(input))
if __name__ == "__main__":
cli()
我相信这是一种非pythonic解决方案。例如,它违反了PEP8。在应用程序code
中包含模块app
的正确/ pythonic方法是什么?
备注:这当然是一个非常小的例子。您可以将其作为最小示例here找到。
奖金更好,理想情况下,我希望能够从任何地方拨打app.py
,它就能找到code.py
。但我希望不管怎样安装项目。
答案 0 :(得分:1)
只需将项目目录my_project
的路径添加到PYTHON_PATH
,然后您需要做的就是像往常一样导入src模块。
import os
import sys
PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../'))
sys.path.append(PROJECT_DIR)
from source import code
请记住,将.
添加到sys路径是危险的。在所有情况下都避免使用它。