我的结构是这样的
/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']
感谢大家的帮助。在设置我的服务器时,有没有我没做过的事情?我阅读了文档,看起来这个导入应该可以工作而不需要添加任何路径......
答案 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 a
或from ..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
。