相关疑难解决方法(0)

Python中的相对导入3

我想从同一目录中的另一个文件导入一个函数.

有时它适用于我,from .mymodule import myfunction但有时我会得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有时它适用from mymodule import myfunction,但有时我也得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.

有人可以向我解释这一切背后的逻辑是什么吗?

python python-import python-3.x

589
推荐指数
16
解决办法
38万
查看次数

如何导入上面目录中的Python类?

我想继承一个位于当前目录之上的文件中的类.

是否可以相对导入该文件?

python directory module python-import

178
推荐指数
6
解决办法
17万
查看次数

从Python解释器运行时获取"ImportError:尝试相对导入而没有已知的父包"

我正在使用Flask 蓝图功能创建模块化应用程序.结果,我的目录结构是这样的:

project
    __init__.py
    config.py
    mould.py
    modules
        __init__.py
        core
            __init__.py
            core.py
            db.py
            models.py
Run Code Online (Sandbox Code Playgroud)

这里的modules目录不会与Python模块混淆,它们用于为我的项目提供模块化结构(核心模块,foo模块,条形模块等).现在,模块目录中的每个文件夹(以及其中包含相同名称的模块core.core)都可以通过以下方式动态导入到我的主烧瓶app(mould.py)中:

for item in os.listdir("modules"):
    if not os.path.isfile("modules" + os.sep + item) and not item.startswith("__"):
        ppath = "modules" + "." + item
        fullpath = "modules" + "." + item + "." + item
        module = importlib.import_module(fullpath)
        app.register_blueprint(module.app)
        print("Registered: " + ppath)
Run Code Online (Sandbox Code Playgroud)

因此,我无法在模块脚本中执行此操作,例如db.py:

import models
Run Code Online (Sandbox Code Playgroud)

因为它在项目级别执行整个模块时会产生路径错误,所以我必须这样做:

from . import models
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题,我能够成功导入所有模块.但是,当我进入核心模块目录进行一些故障排除并启动python解释器时,它不允许我导入db模块:

>>> import db
Traceback (most recent call last):
  File "<stdin>", …
Run Code Online (Sandbox Code Playgroud)

python python-import

11
推荐指数
1
解决办法
6028
查看次数

从一级目录(包)导入模块

Python从一级目录导入模块的正确方法是什么?该目录是一个包含所有这些模块的Python包,我有一个子目录,其中包含需要这些模块的代码.

以下工作正常,但这只是一个黑客.我想要推荐/ pythonic方式.

import sys
sys.path.append("../")
from fruit import Fruit
print("OK")
Run Code Online (Sandbox Code Playgroud)

目录结构:

pkg1
   __init__.py  
   fruit.py  
   +sub_pkg
      __init__.py
      recipe.py
Run Code Online (Sandbox Code Playgroud)

fruit.py的内容

class Fruit:
   def get_name(self):
       print("Fruit name")
Run Code Online (Sandbox Code Playgroud)

sub_pkg/recipe.py..的内容只是一个导入行:

from fruit import Fruit
Run Code Online (Sandbox Code Playgroud)

当我跑:

python recipe.py
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误.

Traceback (most recent call last):
  File "recipe.py", line 2, in <module>
    from fruit import Fruit
ImportError: No module named fruit
Run Code Online (Sandbox Code Playgroud)

我也试过:from pkg1.fruit import Fruit,不行.还看了其他类似的问题.. python -m recipe.pypython -m sub_pkg/recipe.py没有奏效.

python

8
推荐指数
1
解决办法
9834
查看次数

使用 importlib 动态导入包含相对导入的模块

我试图弄清楚如何以编程方式执行包含相对导入的模块。

伪代码

spec = importlib.util.spec_from_file_location(name, path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
Run Code Online (Sandbox Code Playgroud)

其中 name 是类,path 是 .py 的绝对路径

当正在加载的模块包含相对导入时,对 exec_module 的调用将引发以下异常:

尝试在没有已知父包的情况下进行相对导入

有没有办法以编程方式执行本身包含相对导入的 python 模块?如果是这样,怎么办?

python python-3.x

7
推荐指数
1
解决办法
2977
查看次数

尝试相对导入,但没有已知的父程序包

from ..box_utils import decode, nms
Run Code Online (Sandbox Code Playgroud)

该行显示错误

ImportError:尝试相对导入,没有已知的父包

这是什么错误,以及如何解决该错误?

decode nms python-3.x

7
推荐指数
2
解决办法
7294
查看次数

标签 统计

python ×5

python-3.x ×3

python-import ×3

decode ×1

directory ×1

module ×1

nms ×1