小编Jak*_*evi的帖子

从不同层次导入 Python 模块

在我的 git 存储库的顶层,我有以下文件结构:

miscellaneous Dockerfiles, readme, etc
Code/
    training.py
    data/
        generate.py
        tasksets.py
Run Code Online (Sandbox Code Playgroud)

有时,当我将模块作为脚本运行时,我想generate从模块内部导入模块,因此包括以下导入:tasksetstasksetstasksets

import generate
Run Code Online (Sandbox Code Playgroud)

其他时候我想tasksets从模块内部导入模块training,因此training包含以下导入:

import tasksets
Run Code Online (Sandbox Code Playgroud)

然而,这个设置给我带来了问题。当我作为脚本运行时tasksets可以很好地导入,但是如果我在作为脚本运行时导入内部,则会抛出错误(我认为是因为在默认路径中找不到脚本)。我尝试过使用文件、相对导入等查看各种其他 StackOverflow 问题和答案。目前,我的解决方法是在内部使用以下几行:generatetasksetstasksetstrainingtrainingtraininggenerate__init__.pytasksets

if __name__ == "__main__": import generate
else: from data import generate
Run Code Online (Sandbox Code Playgroud)

但这感觉不太对(而且我的 IDE 也不喜欢它)。请有人解释如何使用正确的__init__.py文件分类和导入语句,以便我可以在作为脚本generate运行时导入,也可以在作为脚本运行时导入?tasksetstasksetstraining

python import module package python-3.x

4
推荐指数
1
解决办法
7582
查看次数

标签 统计

import ×1

module ×1

package ×1

python ×1

python-3.x ×1