这是我第一次真正坐下来尝试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'

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


当前回答

我看到很多答案导入了sys和os。这是GitHub副驾驶给我的一个没有提到的更短的:

import sys

sys.path.append(__file__.rsplit("/", 1)[0])

将此添加到我的python脚本顶部也解决了这个问题。

其他回答

对我来说,简单地添加当前目录就可以了。

使用以下结构:

└── myproject
    ├── a.py
    └── b.py

a.py:

from b import some_object
# returns ModuleNotFound error

from myproject.b import some_object
# works

声明正确的sys。调用模块前的路径列表:

import os, sys

#'/home/user/example/parent/child'
current_path = os.path.abspath('.')

#'/home/user/example/parent'
parent_path = os.path.dirname(current_path)

sys.path.append(parent_path)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'child.settings')

您必须将项目的路径附加到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这篇文章

您可以使用这些语句来设置工作目录,这对我使用python3是有效的

import os
import sys
sys.path.insert(1, os.getcwd())

要让Bash自动识别您所在的项目目录:

sudo nano ~/.bashrc

OR

sudo nano ~/.bash_profile

在bash文件的底部:

function set_pythonpath {
    export PYTHONPATH="$(pwd):$PYTHONPATH"
}

PROMPT_COMMAND=set_pythonpath

保存并退出:

Ctrl + X Y

通过以下方法测试更改:

cat ~/.bashrc