这是我第一次真正坐下来尝试python 3,而且似乎失败得很惨。我有以下两个文件:

test.py config.py

py中定义了一些函数和一些变量。我将其归纳为以下几点:

config.py

debug = True

test.py

import config
print (config.debug)

我还有一个__init__.py

然而,我得到以下错误:

ModuleNotFoundError: No module named 'config'

我知道py3约定使用绝对导入:

from . import config

然而,这会导致以下错误:

ImportError: cannot import name 'config'

所以我不知道该怎么做……任何帮助都非常感激。:)


当前回答

如果你使用的是python3 +,那么尝试添加下面的行

import os, sys
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

其他回答

您必须将项目的路径附加到PYTHONPATH,并确保使用绝对导入。


适用于UNIX (Linux, OSX,…)

export PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"

对于Windows

set PYTHONPATH=%PYTHONPATH%;C:\path\to\your\project\

绝对的进口

假设我们有如下的项目结构,

└── myproject
    ├── mypackage
    │   ├── __init__.py
    │   ├── a.py
    └── anotherpackage
        ├── __init__.py
        ├── b.py
        ├── c.py
        └── mysubpackage
            ├── __init__.py
            └── d.py

只需确保从项目的根目录开始引用每个导入。例如,

# in module a.py
import anotherpackage.mysubpackage.d

# in module b
import anotherpackage.c
import mypackage.a

有关更全面的解释,请参阅如何修复ModuleNotFoundError和ImportError这篇文章

正如在原帖子的评论中所述,这似乎是我使用的python解释器的问题,而不是python脚本的问题。我从WinPython包切换到python.org的官方python 3.6,它工作得很好。谢谢大家的帮助:)

如果你使用的是python3 +,那么尝试添加下面的行

import os, sys
dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path)

尝试你的例子

from . import config

得到如下SystemError: /usr/bin/python3.4 test.py 回溯(最近一次调用): 文件"test.py",第1行,在 从。导入配置 SystemError:父模块未加载,不能执行相对导入


这对我来说很有用:

import config
print('debug=%s'%config.debug)

>>>debug=True

使用Python测试:3.4.2 - PyCharm 2016.3.2


除此之外,PyCharm还提供了导入此名称的功能。 你必须点击配置,然后出现一个帮助图标。

您可以简单地将以下文件添加到测试目录,然后python将在测试之前运行它

__init__.py file

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))