当前位置: 首页 > 面试题库 >

如何在python中完成相对导入

彭硕
2023-03-14
问题内容
stuff/
    __init__.py
    mylib.py
    Foo/
        __init__.py
        main.py
        foo/
            __init__.py
            script.py

script.py 想要导入 mylib.py

这只是一个示例,但实际上我只想在父目录中进行模块的相对导入。我已经尝试了各种方法并得到此错误…

Attempted relative import beyond toplevel package

我在某处读到该程序开始处的脚本不应该放在程序包中,并且我尝试像这样修改结构…

stuff/
    mylib.py
    foo.py // equivalent of main.py in above
    foo/
        __init__.py
        script.py

但有同样的错误。

我该怎么做?这是否足够?

编辑:在Python 2


问题答案:

稍微摆弄一下之后,我意识到了如何设置它,并且出于特定性考虑,我将不使用foo bar名称。我的项目目录设置为…

tools/
    core/
        object_editor/
            # files that need to use ntlib.py
            editor.py # see example at bottom
            __init__.py
        state_editor/
            # files that need to use ntlib.py
            __init__.py
        ntlib.py
        __init__.py # core is the top level package
    LICENSE
    state_editor.py # equivalent to main.py for the state editor
    object_editor.py # equivalent to main.py for the object editor

一条线object_editor.py看起来像…

from core.object_editor import editor

一条线editor.py看起来像…

from .. import ntlib

或者

from core import ntlib

关键是在我给问题的示例中,“主要”脚本是从程序包中运行的。一旦将其移出,创建了一个特定的程序包(core),然后将我希望编辑者共享的库(ntlib)移到该程序包中,一切就变得很笨拙了。



 类似资料:
  • 问题内容: 想象一下这个目录结构: 我正在编码,我需要从中导入一些东西。我该怎么办? 我尝试过,但是得到了“未打包的相对导入尝试”。 我四处搜寻,但只发现骇客。有没有一种干净的方法? 问题答案: 每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。 问题是你通过将作为参数传递给解释器而将模块作为运行。 从PEP 328: 相对导入使用模块的属性来确定该模块在包层次结构中的位置。如果模块的名称不包含

  • 问题内容: 假设我有以下文件, 现在,如果我跑步,它说。 这是有道理的,并且按照此链接中的以下语句运行: “它将首先在包的目录中查找” 假设我稍微修改了文件结构(添加了一个核心目录): 现在,如果我运行,它将加载内置模块。 同样在第二种情况下,如果必须遵守“ 它将首先在软件包的目录中查找 ” 这样 的语句 ,是否 应该加载本地文件,因为它是“软件包的目录”? 我的术语“包目录”的意义是 明确 的

  • 问题内容: 大家好-我正在用Python中的相关知识来表达自己的观点。我已经阅读了30篇文档,并在SO和其他论坛上阅读了很多帖子-似乎还是行不通。 我的目录结构目前看起来像这样 我希望expander.py和language_id.py可以访问功能模块。我运行python main.py,可以从components.expander import 和components.language_id i

  • 我有一个配置数据库存储在一个json文件中。该文件从磁盘读取,由Pythons json库解析,并存储在名为的变量中。 现在我正在研究jsonpath_rw以构建更可读的路径表达式,然后编写纯Python代码来访问多个嵌套的dict和数组。 这是我目前的代码: 第一个表达式列出所有UART设备序列号。结果显示在屏幕上并正在工作。关于在线文档,我可以通过访问打印匹配对象的完整路径。这是一个jsonp

  • 问题内容: 在Python中使用相对导入有一个缺点,您将无法再独立运行模块,因为您将得到一个异常: 为了能够执行以下所有操作,我应该如何修改示例代码:和 我正在寻找适用于python 2.6+(包括3.x)的解决方案。 问题答案: 首先,我假设您意识到您编写的内容将导致循环导入问题,因为foo导入bar反之亦然;尝试添加 to test.py,您将看到它失败。必须更改示例才能正常工作。 因此,您要

  • 问题内容: 我想从同一目录中的另一个文件导入函数。 有时它对我有用,但有时我得到: 有时它可与一起使用,但有时我也会得到: 我不了解这里的逻辑,也找不到任何解释。这看起来完全是随机的。 有人可以向我解释所有这些背后的逻辑是什么? 问题答案: 不幸的是,该模块需要位于程序包内部,有时还需要作为脚本运行。知道如何实现吗? 像这样的布局很普遍… … mymodule.py像这样… ......一个myo