【问题标题】:Importing from subfolder in Python从 Python 中的子文件夹导入
【发布时间】:2018-07-14 04:45:26
【问题描述】:

情况就是这样。我正在使用 Python 3.6

我目前有下一个文件夹组织:

/MainProject
  __init__.py
    /Folder1
      pyscript1.py
      pyscript2.py
      __init__.py
    /Folder2
      pyscript3.py
      __init__.py

所以,我正在尝试从 pyscript3 获取 pyscript1.py 中存在的函数。我还在每个级别添加了一个 init.py。在 pyscript3.py 我尝试了以下内容:

from . import Folder1

给出错误:

ImportError: cannot import name 'Folder1'

我也试过了:

from .Utils import script1

给出错误:

ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a 
package

我知道我可以通过以下方式使用 sys 和 os 解决它:

sys.path.append(os.path.realpath('../..'))

但我想知道不使用 sys 是否可行。

【问题讨论】:

    标签: python import


    【解决方案1】:

    注意Folder1 是一个目录,.py 脚本是你的模块。

    pyscript3你应该可以去:

    from Folder1 import pyscript1
    

    然后您可以访问名称为methodname 的方法,例如:

    pyscript1.methodname()
    

    否则你可以像这样直接导入方法:

    from Folder1.pyscript1 import methodname
    

    并像这样使用它:

    methodname()
    

    编辑:

    要让您的程序看到Folder1Folder2,您需要从MainProject 文件夹运行您的程序。

    pyscript3 移动到您的MainFolder 或编写另一个脚本,我们称之为main.py,并调用必要的代码来实例化类/在pyscript3.py 中调用您想要的函数。

    总而言之,您总是希望从项目的基本文件夹中运行入口模块。

    【讨论】:

    • 这是我评论的问题,我得到 ModuleNotFoundError: No module named 'Folder1'
    • 您无法导入 Folder1,但您可以从 Folder1 导入脚本。您可以扩展您的 MainProject 文件夹吗?入口点在哪里?
    • 我正在尝试从 pyscript3 到 pyscript1,入口点是 pyscript3。
    • 你能显示你的 main.py 或等效文件吗?大概在 MainProject 文件夹中?
    • 另外,你是如何运行你的程序的?只需python main.py?
    【解决方案2】:

    你可以使用 from ..Folder1 import pyscript1 在 pyscript3.py 但是您必须从父模块或在您的情况下从 MainProject 加载 pyscript3。

    【讨论】:

    • 这是上面两个级别,并且不起作用,并且我无法从父模块加载pyscript3,如果我使用..Folder1,也会给出:ValueError:尝试相对导入超出顶部级包
    猜你喜欢
    • 2013-02-19
    • 2023-02-02
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多