【问题标题】:importing from same file raises ImportError从同一文件导入会引发 ImportError
【发布时间】:2015-08-06 23:38:58
【问题描述】:

对不起,我找不到答案。 我有这棵树:

Dogs&Sheeps
    simulation.py
    stuff
        main.py
        values.py

simulation.py 中的代码开始:

import pygame
import sys

from stuff import main
from stuff import values

main.py 中的代码开始:

from random import randint
from time import sleep
import queue
import pygame
import sys

import values

如果我启动 Simulation.py,则会出现此错误:

    Traceback (most recent call last):
  File "...\simulation.py", line 5, in <module>
    from stuff import main
  File "...\stuff\main.py", line 7, in <module>
    import values
ImportError: No module named 'values'

我认为我想做的事情很明显,但无论如何。在main.py文件中,我想导入同一文件夹中的values.py文件。

【问题讨论】:

  • 您需要在stuffmark it as a package 中的__init__.py 文件。
  • 我在 stuff 文件夹中添加了 __init__.py 这是一个空文件,但它引发了同样的错误
  • Dogs&amp;Sheeps文件夹和stuff文件夹中也有不同的文件有关系吗?
  • 好吧,这个解决方案不起作用@Anand S Kumar 解决了它,即使没有__init__.py thingie,它也能工作。

标签: python python-3.x python-import importerror


【解决方案1】:

在 Python 3.x 中,来自 documentation -

当包被构造成子包时(如示例中的声音包),您可以使用绝对导入来引用兄弟包的子模块。比如模块sound.filters.vocoder需要使用sound.effects包中的echo模块,可以使用from sound.effects import echo

同理,你需要使用绝对包名,而不是相对名,所以在你的main.py 做-

from stuff import values 

【讨论】:

  • 谢谢,它有效!但为什么?你在非编程语言中说的是不是它导入main.py所以它被导入simulation.py所以它不在stuff文件夹中所以我不得不说我需要在stuff文件夹中搜索它?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 2018-04-24
  • 1970-01-01
  • 2021-12-24
  • 2018-04-11
相关资源
最近更新 更多