python导入文件夹里面的模块

时间:2013-12-08 01:08:45

标签: python

想要了解导入带文件夹

的模块的正确方法
/garden
    __init__.py
    utilities.py
    someTools.py
    /plants
        __init__.py
        carrot.py
        corn.py

内部/plants/__init__.py我有

__all__ = ['carrot', 'corn']
from . import *

carrot.py

def info():
    print "I'm in carrot.py"

当我这样做时

import garden
garden.carrot.info()
# got correct result
I'm in carrot.py

我的问题是如何更正utilities.py的名称空间,例如carrot.pycorn.py内的名称空间。我想在utilities.py

中使用函数

当我

时,在carrot.py
import utilities as util

# try use it and got global name error
util.someFunc()
# NameError: global name 'util' is not defined # 

我可以在plants文件夹中配置__init__.py,以便导入花园内的所有模块吗?像公用事业和一些工具?所以我不必在carrot.py和corn.py中导入实用程序并且能够使用实用程序吗?

1 个答案:

答案 0 :(得分:3)

注意:所有__init__.py个文件都是空的。

main.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       fun_a.py
    package_b/ ->
       __init__.py
       fun_b.py

应用程序/ package_a / fun_a.py

def print_a():
    print 'This is a function in dir package_a'

应用程序/ package_b / fun_b.py

from app.package_a.fun_a import print_a
def print_b():
    print 'This is a function in dir package_b'
    print 'going to call a function in dir package_a'
    print '-'*30
    print_a()

main.py

from app.package_b import fun_b
fun_b.print_b()

如果你运行$ python main.py,它会返回:

This is a function in dir package_b
going to call a function in dir package_a
------------------------------
This is a function in dir package_a
  • main.py执行:from app.package_b import fun_b
  • fun_b.py执行from app.package_a.fun_a import print_a

如果app中有PYTHONPATH,那么您可以从任何地方>>> from app.package_...

文件夹package_b中的文件使用文件夹package_a中的文件,这就是您想要的。右??