5

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

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导入模块abcCore包中。

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

4

3 回答 3

5

您需要将 python 模块的目录添加到 sys 路径。

如果你有这样的事情

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()
于 2012-05-17T22:53:02.027 回答
1

如果您有确切的目录结构,则可以使用相对导入从父文件夹导入:

from ..Core import a
于 2012-05-18T00:40:33.697 回答
1

在 AppOne.py 中:

import os
os.chdir("..")

from Core import a

或者,您可以在 AppOne.py 中编写:

import sys
sys.path.insert(-1,"..")

from Core import a
于 2012-05-17T22:54:30.967 回答