不同包的调用
在python中,包package的物理层面对应文件夹,模块model的物理层面对应程序文件.
1 如果一个文件夹中有__init__.py文件,则python不会认为它是一个普通的文件夹,而是一个package,在__init__.py程序中用于存放它所在package的顶层目录(即到它的父目录),为了其它包调用它的时候,python解释器可以找到它.
当一个包中没有__init__.py文件的时候,也可以,只不过其它程序想要调用这个package中的程序时,需要在开头把该package所在的顶层目录加上.
2 当一个package内的程序互相调用的时候,直接import即可,无需导入写路径.
3 当程序运行开头的导入包时,会执行该包下的__init__.py程序,例如如果__init__.py程序中有print('kkk')时,会输出.
first程序
# import sys # # 将的上级文件夹绝对路径导入临时系统变量 # sys.path.append("/home/sxtj/han/推荐系统/program") import os,sys #这里是把顶层目录加入到python的环境变量中。 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) print(BASE_DIR) sys.path.append(BASE_DIR) from product import * from package2 import quotient a = product(2,4) print(a) b = quotient.quotient(10,5) print(b) # /home/sxtj/han/推荐系统/program # 8 # 0.5
product程序
def product(x, y): return x*y
quotient程序
def quotient(x, y): return y/x
用__init__.py程序时,可不用导入顶层目录来找模块.
如上用main.py调用test1.py和test2.py程序的时候,要提前在各自的__init__.py文件下声明,这样导入t1和t2包的时候,才能找到它们下面的模块和函数.
main程序
#!/usr/bin/env python # encoding: utf-8 import pandas as pd import warnings import t1.t11.test1 as model1 import t2.test2 as model2 warnings.filterwarnings("ignore") def func(): pass class Main(): def __init__(self): pass if __name__ == "__main__": model1.func() model2.func() df1=pd.read_csv('./cache/df1.csv') df2=pd.read_csv('./cache/df2.csv') df3=df1.copy() df3['value']=df1['value'].values*0.3+df2['value'].values*0.7 df3.to_csv('./cache/df3.csv',index=False)
test1程序
#!/usr/bin/env python # encoding: utf-8 import pandas as pd import numpy as np import os import warnings warnings.filterwarnings("ignore") a = os.listdir('./') print(a) # ['cache', 't2', 'all_program.py', 't1'] # 特别要注意这里的文件输出的是main.py程序所在目录下的文件, # 因为在main.py中调用的时候,这行程序相当于在main.py中运行 def func(): print(11) df=pd.DataFrame(np.random.randint(0,100,(10,2)),columns=['id','value']) df['filename']=1 df.to_csv('./cache/df1.csv') class Main(): def __init__(self): pass if __name__ == "__main__": print(1)
t1文件夹下的__init__.py
# 参数__all__用于声明本文件夹下的模块和函数, # 其他程序导入该文件夹时才能找到里面的程序文件. __all__ = ['test1']
test2程序
#!/usr/bin/env python # encoding: utf-8 import pandas as pd import numpy as np import warnings warnings.filterwarnings("ignore") def func(): print(22) df = pd.DataFrame(np.random.randint(0, 100, (10, 2)), columns=['id', 'value']) df['filename'] = 2 df.to_csv('./cache/df2.csv') class Main(): def __init__(self): pass if __name__ == "__main__": print(2)
def quotient(x, y): return y/
参考:https://www.cnblogs.com/keep-going2099/articles/8178387.html#_label1
https://www.cnblogs.com/yinzhengjie/p/8587656.html
https://blog.csdn.net/XuZZ94/article/details/79669313