python 中自定义函数类的引用,主要分为以下几种情况进行讨论。
1. 在同一个文件夹下
对于同一文件夹下的py 文件来说,按理来说,其实可以直接正常import使用的,如下面的这种情况,dissim_get.py 文件 和lightfm_reco.py 文件,想要在lightfm_reco.py文件中引用dissim_get.py , 其实可以直接通过下面的方法进行引用:
import dissim_get #或者 from dissim_get import *
如果不能,则只能够将dissim_get.py 文件所在的文件夹的路径引入到python的搜索路径中即可,在这里只需要将文件夹lightfm_init的路径导入即可。
import sys sys.path.append(\'py文件所在父目录\')
或者还可以直接采用下面这一种方式
from . import dissim_get
如果要引用改dissim_get.py文件下的其他的内容,则可以使用下面的语句来实现:
from .dissim_get import get_euclidean_result , get_cosine_result ,get_pearsonr_result
2. 不在同一文件夹中
不在同一文件夹中可以分为以下两种情况:
针对于这两种情况,可以采用下面的方式 , 但是并不是所有时候都管用
import sys sys.path.append(\'相应的路径\')
针对于第一种情况,还可以使用下面方法:
from ..Handledata.input_handle import get_lr_input_data
针对于 第二种情况 还可以使用 以下方法:
# 针对于不同文件下的 第二种情况,要引用的py文件在另外的一个python package里面 from src import Handeldata # 或者要引用具体的函数 则 使用 from src.Handledata.sampling_random import sampling_data # 公式为 : from 不平行的另外一个python package import 函数类
3.总结
从上面的几种方法来看 , 引用自定义的函数类 的时候和引用官方函数类的方法是一致的,但是在运行的时候可能不能够使用的原因在于,并没有找到自定义函数类的路径,因此在from 或者 import 自定义函数类的时候则需要 确定一下路径:
3. 1 针对于同一个文件夹下的py文件
# "." 表示当前路径下的同级文件 from . import 函数类名
3.2 针对于不同文件夹下(但是属于同一个大的python package下)
也即 存在于平行python package下时
# ".." 回到了上级目录 并引用该目录下的A模块 from ..A import 要引用的函数类
3.3 存在于同一项目下,两个大的python package下,也即上面所示3图的情况
针对于这一种情况,则直接引用 大的python package 即可
from src import 所需函数类
4. python 中实现打包自己的代码
如何将写好的python模块,进行封装,最后变成直接供别人调用的模块呢 ???
封装也即意味着其他的用户并不能够直接查看到模块的具体的实现过程、方法、属性等等, 且封装面向对象的三大特性之一, 因此如何进行有效的封装呢? 下面举个例子来实现:
首先建立一个python package —— example , 并在其下建立test.py 文件,具体代码如下:
def run(): print (\'This is a run package!\') if __name__ == \'__main__\': run()
需要注意的是,此时在example 包下有两个文件,其一 test.py文件 ,其二 __init__.py 文件 。 要想进行封装引用还需要在example包的同目录下建立setup.py文件,其代码具体如下:
from setuptools import find_packages,setup setup( name = \'test0\', version = \'0.1\', packages = find_packages(), )
其中: name = 自己建立的py文件名
完成上面的步骤之后,打开Anaconda Prompt / cmd ,并将目录cd到所在模块的路径即可进行安装:
然后使用如下的命令来完成模块的安装即可,安装之后在看该目录下的tree结构如下图
python setup.py install
上面的步骤已经完成了python自建模块的封装, 想要进行打包成zip 则只需执行;
python setup.py sdist
5. 注意
有的时候出现不管用的情况,其可能因为在建立python模块下没有__init__.py文件,这样是因为在建立python - module 的时候直接按照正常的文件夹directory来建立了,而没有选择python package , 此时改相应的文件夹下面就没有__init__.py文件 。
还有一种可能引用不成功的情况是,在即使有了__init__.py文件还是不能够引用成功,此时则在被引用的python包下的__init__.py文件中通过语句将所要引用的函数类进行说明:
__all__=[\'函数类名‘]
好了 ,大致就是这样,终于over !! !