python - Python 帮助处理包和模块
问题描述
我需要一些帮助来处理 python 中的文件夹结构。我得到了这样的结构:
/main-folder
/assets
somefiles.txt
/integrations
/module-folder
__init__.py
ingestion.py
__init__.py
models.py
在ingestion.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
直接从其目录执行时,它说:No module named 'models'
. 所以我猜我必须将整个事情作为一个包来执行。我不知道应该如何导入位于包上方的模块并且不能触及结构。
任何帮助将不胜感激。
解决方案
您要做的就是将模块的目录添加到 PYTHONPATH 环境变量中。但是,如果您不想这样做,您可以修改程序中的 sys.path 列表,Python 解释器在其中搜索要导入的模块,python 文档说:
当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它会在变量 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
推荐阅读
- opengl - 在OpenGL中旋转后沿着它的前轴平移相机?
- sql - 如何使用 postgresql 转换表
- php - .htaccess 从身份验证中排除特定文件
- linux - Docker:附加到特定的 bash
- excel - 使用 VBA 更新表的行
- intellij-idea - 创建一个更改数据库树的插件
- verilog - Verilog 中与 1023 个 10 位向量的异或相关的延迟
- swift - Google Colaboratory 中的 Swift 内核
- node.js - Bot framework V4如何添加带有折扣的facebook收据
- asp.net-core-webapi - 对于以下要点,开发 .net core 2.2 web api 有什么建议?