Python帮助处理包和模块

问题描述 投票:0回答:1

我需要一些帮助来处理python中的文件夹结构。我得到了一个这样的结构。

/main-folder
    /assets
        somefiles.txt
    /integrations
        /module-folder
            __init__.py
            ingestion.py
        __init__.py
    models.py

Inside 摄取.py 我有。

import os    
from models import MyModel

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

some_function()
    some_processing()

if __name__ == "__main__":
    some_function()

都有 __init__.py 上面提到的都是空的。

所以我需要处理一些信息,并使用 models 模块来存储它们,当试图执行 intestion.py 直接从它的dir说。No module named 'models'. 所以我猜测我必须以包的形式来执行。我不知道应该如何导入一个位于包上面的模块,而且不能碰结构。

任何帮助woud是感激。

python package python-module python-packaging
1个回答
0
投票

你要做的是将模块的目录添加到PYTHONPATH环境变量中。如果您不想这样做,您可以修改程序中的 sys.path 列表,Python 解释器在其中搜索要导入的模块,python 文档。:

当导入一个名为spam的模块时,解释器首先会搜索一个内置的该名称的模块,如果没有找到,它就会在变量sys.path给出的目录列表中搜索一个名为spam.py的文件。如果没有找到,它就会在sys.path变量给出的目录列表中搜索名为spam.py的文件,sys.path是根据这些位置初始化的。

  • 包含输入脚本的目录(或当前目录)。
  • PYTHONPATH (目录名的列表,与 shell 变量 PATH 的语法相同)。

  • 安装相关的默认值。

初始化后,Python 程序可以修改 sys.path。包含正在运行的脚本的目录被放在搜索路径的开头,在标准库路径之前。这意味着该目录中的脚本将被加载,而不是库目录中的同名模块。这是一个错误,除非是有意替换。

知道了这一点,你就可以在你的程序中进行以下操作。

import sys
# Add the main-folder folder path to the sys.path list
sys.path.append('/path/to/main-folder/')

# Now you can import your module
from main-folder import models
# Or just
import main-folder
© www.soinside.com 2019 - 2024. All rights reserved.