我有一个Django的结构是这样的(只显示库):全局/应用程序文件夹的lib导入在Django
project/lib/ # Global libraries that will be used cross apps
project/lib/global_stuff.py
project/apps/app1/lib/special_for_app1.py
project/apps/app2/lib/special_for_app2.py
一些应用程序没有一个lib文件夹。
from apps.app1.lib import special_for_app1
工作正常。但是当我在已经包含本地lib文件夹的文件夹中时,如何从全局lib文件夹导入?
从应用程序内的views.py在应用程序的一个文件:
from lib import global_stuff
给我ImportError: cannot import name global_stuff
从进口的.lib global_stuff
给我ImportError: cannot import name global_stuff
from ..lib import global_stuff
给我ImportError: No module named lib
from ...lib import global_stuff
给我ValueError: Attempted relative import beyond toplevel package
from project.lib import global_stuff
的作品,但我真的不希望使用项目名称本身被卡住在im港口。
有没有什么办法可以解决这个问题,而不是在导入中使用项目名称,或者改变整个lib的想法。
或者是否有任何其他良好的做法来存储代码的主要部分?
您是否确保每个目录都有一个'__init __。py'?你有没有把“/ path/to/project”放到你的PYTHONPATH中? – rantanplan
是的,每个目录都有一个__init__.py,并且sys.path中的第一个条目是项目目录。 – xeor