探究python模块之间的检索和调用关系
突然想研究一下如果我在本地目录里创造一个tensorflow库的相同接口,但实现有些差异,我的本地目录里的程序是会调用tensorflow库(在C:\Users\tellw\AppData\Local\Programs\Python\Python310\Lib\site-packages目录下)的接口还是自定义接口,如果它能调用自定义的魔改接口,可以方便我在不改动源代码的情况下调试本地的代码。
实验
项目结构:
1 | |- test.py |
项目代码的说明中涉及jieba库的两种实现,一种是实验中的自定义实现,我就直说为jieba,另一种是site-packages目录下的官方jieba实现,我定义为原生jieba
test.py
1 | import jieba |
1 |
|
from jieba import time
1 | 我当初查询```dir(jieba)```看到结果里有个```time```,以为是jieba又实现了个新的属于它自己的time函数,再看到```原生jieba```的```__init__.py```文件里```import time```才知道```dir()```能获取模块的上下文(环境、属性),而这个上下文包含所有导入的模块。```jieba```的包初始化代码这样写的原因是导入time属性,并且由于解释器的搜索路径是项目目录,在项目目录里找到```jieba```,```jieba```有个名为time的脚本,加载进来作为jieba的上下文。 |
def localtime():
print(‘aaaa’)
print(‘cccc’)
return ‘dddd’
对于jieba.time.localtime()的本地实现,如果没有return那行代码,那么localtime()函数没有返回值,则打印localtime()的值时会打印出None```
创建于2023.2.22/15.15,修改于2023.2.22/15.16