[英]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.