从子包导入python包

时间:2015-05-26 10:07:11

标签: python python-2.7

在此目录树中:

mod
| __init__.py
|-mod1
    |-__init__.py
    |-ceva.py
|-mod2
    |- __init__.py
    |-altceva.py
  • 所有 __ init __。py 文件都为空。

  • PYTHONPATH = $ PYTHONPATH:PATH_TO_PARENT /修改

  • ceva.py 文件包含我需要导入的功能。

如何在 altceva.py 文件中导入该功能(来自 ceva.py )?

altceva.py 中执行from mod.mod1.ceva import foo似乎有效,但前提是我从 mod 目录运行python mod2/altceva.py,但不是从 MOD / MOD2 即可。如何从 mod mod / mod2 路径进行导入?

2 个答案:

答案 0 :(得分:0)

您必须使您的mod目录可供Python解释器使用。如果您使用的是MacOSX,请执行以下操作:

cd path_to_main_mod_directory
ln -s /Library/Python/2.7/site-packages/mod mod

那么它会起作用:

python mod/mod2/altceva.py
cd mod && python mod2/altceva.py

答案 1 :(得分:0)

您需要将mod添加到python解释器使用的PATH中。 如您所知,您可以通过脚本本身完成自己的小文件结构。

<强> altceva.py

import sys
import os

#Absolute path of mod2 directory
#__file__ is the location of this script
mod2_dir = os.path.dirname(os.path.realname(__file__))
#Absolute path of mod directory
mod_dir = os.path.dirname(mod2_dir)

#Add mod to PATH
sys.path.append(mod_dir)

from mod1.ceva import foo

这可以让你从mod目录导入任何东西,你也不需要把mod。在导入开始时。