如果需要建立一个python模块让其他地方可以导入并且使用就要在模块的目录下添加 __init__.py文件,通常情况下是空文件就可以了,只是要有这么个名称的文件。
但是我们翻看很多项目的源码的时候就发现,这个文件里有很多的代码,今天就来总结下__init__.py这个文件有哪些用途。
1 在需要封装成模块的目录下建立空的__init__.py文件,是的可以导入并使用此模块(这个是最基础的功能)
2 可以把同一个包下文件经常要导入的包,写在__init__.py 中,然后在文件中导入一次, 就把所有的需要的包导入到文件中了。
[reddit 上有一则关于__init__.py使用的讨论,有兴趣可以看看]
1 2 | #test/__init__.py from datetime import datetime |
1 2 3 4 | #test/foo.py from __init__ import * print datetime.now() |
好多人也不建议这么做。
3 不仅仅是导入,可以在__init__.py中初始化对象,对于经常使用的对象导入简化点。
这是so上的一个回答 http://stackoverflow.com/questions/448271/what-is-init-py-for
Here is an example from one of my projects, in which I frequently import a sessionmaker
called Session
to interact with my database. I wrote a “database” package with a few modules:
database/ __init__.py schema.py insertions.py queries.py
My __init__.py
contains the following code:
import os from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine(os.environ['DATABASE_URL']) Session = sessionmaker(bind=engine)
Since I define Session
here, I can start a new session using the syntax below. This code would be the same executed from inside or outside of the “database” package directory.
from database import Session session = Session()
Of course, this is a small convenience — the alternative would be to define Session
in a new file like “create_session.py” in my database package, and start new sessions using:
from database.create_session import Session session = Session()