例子
不要使用相对路径。
'''
__init__.py
'''
# from net.functions import *
VERSION = "1.0.0"
import os, sys
module_path = os.path.dirname(__file__)
module_parent_path = os.path.dirname(module_path)
sys.path.extend([module_path, module_parent_path])
from net import *
from functions import *
from net.fnetlogger import FnetLogger
上面代码中的os, sys这一段代码很重要。为什么能直接找到site-package中的包,是因为site-package的路径已经加载到sys.path中了,而os,sys那段代码的内容就是将你自己写的模块的路径加入到路径中。
import os, sys
module_path = os.path.dirname(__file__)
module_parent_path = os.path.dirname(module_path)
sys.path.extend([module_path, module_parent_path])
模块导入
在Python中,一个包是一个目录,它包含了一组相关的模块和子包。在这个包目录下,如果存在一个名为__init__.py
的文件,它将被视为这个包的初始化模块。
__init__.py
的作用是在导入包时执行一些初始化代码,例如设置包的默认属性或者导入子模块。同时,它还可以控制包的导入行为,定义包的接口和子包的可见性等。
下面是一个示例,假设我们有一个名为my_package
的包,它包含了两个模块module1
和module2
,并且我们想在包被导入时执行一些初始化代码:
my_package/
__init__.py
module1.py
module2.py
我们可以在__init__.py
中编写如下代码:
# my_package/__init__.py
print("Initializing my_package...")
# 导入模块
from my_package import module1
from my_package import module2
# 设置默认属性
VERSION = "1.0.0"
这里我们在__init__.py
中输出了一条初始化信息,并导入了module1
和module2
模块。我们还定义了一个名为VERSION
的默认属性,可以在其他模块中使用。
当我们导入my_package
时,__init__.py
会被自动执行,输出初始化信息并导入模块:
import my_package
# 输出 "Initializing my_package..."
# 并导入 my_package.module1 和 my_package.module2
这样,我们就可以在包被导入时执行一些初始化操作,并方便地导入子模块和设置默认属性。
建议不要使用相对路径,即点符号
不要使用相对路径。
点符号
从如下代码:
from . import module1
代码中的点符号是相对路径,是相对当前模块文件夹的路径,而不是编译器等其他路径。即如下:
# . in __init__.py the same as
os.path.dirname(__file__)
关于import *
# __init__.py
from . import * # attention:: DO NOT Use Relative Path.
from xx import *
# the same as
from os import *
在python的__init__.py
文件中经常能看到import *,它的意思就是将文件中的函数,变量,类等全导入。列入你在文件中有个属性是Pi
,你在使用from xx import Pi
后,你便可以直接调用Pi
,而不需要使用xx.Pi
来调用Pi。