我正在尝试重构我的代码(一堆核心模块和一些生活在公共目录中的应用程序)。 我想得到这个结构
Root
__init__.py
Core
__init__.py
a.py
b.py
c.py
AppOne
__init__.py
AppOne.py
AppTwo
__init__.py
AppTwo.py
AppThree
__init__.py
AppThree.py
AppOne.py
,AppTwo.py
和AppThree.py
导入a
包中的模块b
,c
和Core
。
我不明白如何编写__init__.py
文件和import语句。我读过了
http://docs.python.org/tutorial/modules.html和http://guide.python-distribute.org/creation.html。我收到的错误如“尝试非包装中的相对导入”或“无效的Sintaxis”
答案 0 :(得分:4)
您需要将python模块的目录添加到sys path。
如果你有类似的东西
Root
here_using_my_module.py
my_module
__init__.py --> leave it empty
a.py
b.py
c.py
您需要将模块目录添加到sys_path
//here_using_your_module.py
import os, sys
abspath = lambda *p: os.path.abspath(os.path.join(*p))
PROJECT_ROOT = abspath(os.path.dirname(__file__))
sys.path.insert(0,PROJECT_ROOT)
import a from my_module
a.do_something()
答案 1 :(得分:1)
在AppOne.py中:
import os
os.chdir("..")
from Core import a
或者,你可以用AppOne.py写一下:
import sys
sys.path.insert(-1,"..")
from Core import a
答案 2 :(得分:1)
如果您拥有完全目录结构,则可以使用相对导入从父文件夹导入:
from ..Core import a