繁体   English   中英

在python中将应用程序与逻辑和相对导入分开

[英]Separating application from logic and relative imports in python

我想要以下项目的结构; 逻辑在驻留在src中的模块和驻留在apps中的apps

my_project/
├── apps
│   ├── __init__.py
│   └── app.py
└── src
    ├── __init__.py
    └── code.py

我的目标是能够从命令行执行app.py (将my_project作为当前目录)。

目前,我所做的是在app.py有以下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 在应用app应用app中包含模块code的正确/pythonic 方法是什么?

备注:这当然是一个非常小的例子。 您可以在此处找到它作为最小示例。

奖金更好,理想情况下,我希望能够从任何地方调用app.py并且它能够找到code.py 但我想在不以某种方式安装项目的情况下拥有这个。

只需将项目目录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

请记住,添加. to sys 路径是危险的。 在所有情况下都避免使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM