如何编写python包

时间:2012-05-17 22:41:10

标签: python

我正在尝试重构我的代码(一堆核心模块和一些生活在公共目录中的应用程序)。 我想得到这个结构

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.pyAppTwo.pyAppThree.py导入a包中的模块bcCore

我不明白如何编写__init__.py文件和import语句。我读过了 http://docs.python.org/tutorial/modules.htmlhttp://guide.python-distribute.org/creation.html。我收到的错误如“尝试非包装中的相对导入”或“无效的Sintaxis”

3 个答案:

答案 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