Python导入错误和正确的导入指南

时间:2017-05-30 01:38:20

标签: python import

我的结构是这样的

/App
__init__.py
    -/dirA
        -__init__.py
        -a.py
    -/dirB
        -__init__.py
        -b.py
/samy_app
    __init__.py
    settings.py
    urls.py
manage.py 

在b.py里面我要导入a.py

所以在b.py里面我有

from App.dirA import a

然而,我收到的错误是" ImportError:没有名为' App'"

的模块

我也尝试过相对导入......但那也不行。

我还想知道我是否应该将文件放在这样的单独目录中。这真的是为了组织。或者我应该将它们移出应用程序并将文件夹放在与manage.py相同的目录中吗?

真的很喜欢这方面的帮助。一整天都在努力。

sys.path输出

['', '/root/django-dev', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

感谢大家的帮助。在设置我的服务器时,有没有我没做过的事情?我阅读了文档,看起来这个导入应该可以工作而不需要添加任何路径......

4 个答案:

答案 0 :(得分:0)

我相信当我做到这一点时,我通常不得不这样做:

from dirA.a import THING_IM_IMPORTING_FROM_A

我的应用程序的根目录是App目录。

答案 1 :(得分:0)

你提到manage.py,你也许在使用django吗?

无论如何,如果你从dirB运行一个脚本,你会得到一个错误,但如果你有这样的结构:

main.py   
App/
    __init__.py
    dirA/
        __init__.py
        a.py
    dirB
        __init__.py
        b.py

在main.py中你有 from App.dirB import b

并在b.py中有

from App.dirA import afrom ..dirA import a

你应该没问题。

在任何其他情况下,您应该将{/(或其绝对路径)添加到PYTHONPATH

import sys
sys.path.append("../")

但我认为这不是一个好主意。

答案 2 :(得分:0)

编辑:我误解了这个问题!

您可以验证/ App是模块搜索路径上目录的嵌套目录吗?

在交互式会话中,导入sys,然后键入sys.path。第一个条目是CWD或顶级程序文件的目录。如果您没有看到导致/ App的目录,那么您需要添加它,因为Python在您导入包以查找目录时从左到右搜索此列表那是它的父母。您可以编辑PYTHONPATH环境变量,也可以创建一个.pth文本文件,只需键入导向它的目录(即/ home / user / Documents / code')并将其放在Python的安装目录中,或您的site-packages文件夹。

完成后,当您检查sys.path时,您会看到例如' / home / user / Documents / code'。和/ Apps应该在此示例中的代码文件夹中。

答案 3 :(得分:0)

App目录的父级应位于PYTHONPATH(或sys.path)。如果App目录位于/home/dorian/mega_project,则PYTHONPATH应包含/home/dorian/mega_project