想要了解导入带文件夹
的模块的正确方法/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.py
和corn.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中导入实用程序并且能够使用实用程序吗?
答案 0 :(得分:3)
注意:所有__init__.py
个文件都是空的。
main.py
app/ ->
__init__.py
package_a/ ->
__init__.py
fun_a.py
package_b/ ->
__init__.py
fun_b.py
def print_a():
print 'This is a function in dir package_a'
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()
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
from app.package_b import fun_b
from app.package_a.fun_a import print_a
如果app
中有PYTHONPATH
,那么您可以从任何地方>>> from app.package_...
文件夹package_b
中的文件使用文件夹package_a
中的文件,这就是您想要的。右??