Python - 从子文件夹执行绝对导入

时间:2009-01-21 00:10:47

标签: python python-import

基本上我问这个人的问题是同一个问题:How to do relative imports in Python?

但没有人给他一个正确答案。鉴于你在一个子文件夹中,你想要上一个目录,然后进入另一个子文件夹,做他们建议的不起作用(正如OP在他的评论中指出的那样)。

我知道你可以使用sys.path来做到这一点,但我更喜欢一种更干净的方法。

示例:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

如何将Module_A导入Module_B?

3 个答案:

答案 0 :(得分:11)

main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. 您运行python main.py
  2. main.pyimport app.package_a.module_a
  3. module_a.py执行import app.package_b.module_b
  4. 或者2或3可以使用:from app.package_a import module_a

    只要你的PYTHONPATH中有app,那就行了。 main.py可以在任何地方。

    所以你写一个setup.py来将整个app包和子包复制(安装)到目标系统的python文件夹,并main.py来定位系统的脚本文件夹。

答案 1 :(得分:2)

如果我是reading correctly,请使用Python 2.5或更高版本:

from ..Module_B import Module_B

我以为我精通Python,但我不知道在2.5版本中是否可行。

答案 2 :(得分:0)

如果您随后将Module_B导入App,则

Module_B.py:     导入ModuleA

App.py(也导入ModuleA,现在默认情况下在Python路径中)

import Module_B.Module_B

另一种方法是将__init__.py(Module_A / App文件夹中的那个)更新为:

import os
import sys
sys.path.extend('%s../' % os.getcwd())
import ModuleA

另一种方法是将您的文件夹添加到PYTHONPATH环境var。