Python|关于Python包和跨模块代码调用,让你彻底搞清楚

Python|关于Python包和跨模块代码调用,让你彻底搞清楚

文章图片

Python|关于Python包和跨模块代码调用,让你彻底搞清楚

文章图片

Python|关于Python包和跨模块代码调用,让你彻底搞清楚

文章图片

Python|关于Python包和跨模块代码调用,让你彻底搞清楚

文章图片

Python|关于Python包和跨模块代码调用,让你彻底搞清楚

二哥出品 , 必是精品 。 欢迎关注评论和交流 。
无论是用Python做自动化测测试还是用Python做开发 , 都会有自己特定的工程目录 , 而在每一个工程目录下面存放的就是一个个包 , 包里面放得就是模块 。 那么他们之间如何调用才会实现代码之间的交流无阻碍呢?
很多朋友可能会说 , 这无外乎就三种方法吗?有什么可以讨论的呢 。 其实 , 不然 。
│  README.md
│  requirements.txt
│  setup.py
│  __init__.py

├─bin
│      foo.py
│      __init__.py

├─conf
│      settings.py
│      __init__.py

├─docs
│      refer.txt
│      __init__.py

└─foo
   │  main.py
   │  __init__.py
   │
   └─tests
           test1.py
           test_main.py
           __init__.py

以上图所示的代码结构为例 。
【Python|关于Python包和跨模块代码调用,让你彻底搞清楚】test1.py如何调用test_main.py的方法呢?foo.py如何调用conf.py里面的方法呢?
同一层级下模块导入from test_main import test_fun1
from test_main import *
import test_main




似乎就是这样的简单 , 这三种方式都是可以的呀!
咳咳 。 说明一下 。
当模块在同一层级目录下的时候 , 的确是用这样的就可以实现的 。
比较推荐from test_main import test_fun1的方式 , 可以同时导入多个模块或者方法 。
但是 , 当目录结构比较复杂的时候 , 就需要考虑更多一些了 , 下面我们就来看一看 。
包(Package)当你的模块文件越来越多 , 就需要对模块文件进行划分比如把负责跟数据库交互的都放一个文件夹 , 把与页面交互相关的放一个文件夹 。
像上面这样 , 一个Foo下多个模块文件 , 这个带有__init__.py的文件夹就被称为包 。
一个包就是一个文件夹 , 该文件夹下必须存在__init__文件 , 可以为空 , 标识当前文件夹是一个包 。
这个__init__的文件主要是用来对包进行一些初始化的 , 当当前这个 package被别的程序调用时 __init__.py文件会先执行 。
__init__.py一般为空一些你希望只要 package被调用就立刻执行的代码可以放在里面 , 一会后面会演示 。
当在setup.py中import conf的时候 , 会出现以下结果 , 即conf的__init__.py被执行了 。

跨模块导入接着上面的目录结构来看 , setup.py如何调用main.py里面的配置呢?
根据上面的结构如何实现在bin下的foo.py中导入conf.py的数据呢?
直接导入的话会报错说找到不模块 。

方法一 , 添加绝对路径到环境变量中 。
问题:多个地方导入时会很麻烦 , 同时代码无法移植 , 别人在其他电脑上维护代码时 , 没有相同路径就会报错的 , 所以不推荐 。