Python工具脚本如何调用外层模块

Python客栈

共 1469字,需浏览 3分钟

 ·

2024-04-11 00:19

Python客栈 设为“星标 第一时间收到最新资讯


我三年前写过一篇文章:《小问题大隐患:如何正确设置 Python 项目的入口文件?》。讲到Python项目应该如何正确组织代码结构。入口文件应该在最外面,调用关系应该是从外向内调用。绝对不能学Java,从一个很深层的文件夹里面往外调用。

不过我在这篇文章的最后,也提到了一种例外情况,那就是工具脚本不受这个规则的限制。如下图所示。

edd49d59f18c10b0f6444b9441ea65c8.webp

今天有同学在问我,这种情况应该怎么调用,才能让remove_outdated_data.py正确导入models里面的模块。我们就来说明一下。

首先,我们来创建一个示例程序,结构如下图所示:

2b19a28fed787ad461dd3e6e0b3f6b8b.webp

其中,aa.py文件的内容为:

      def i_am_func():
    print('我是一个函数')

test.py文件的内容为:

      from models.aa import i_am_func


i_am_func()

那么,不修改任何环境变量,也不修改sys.path的情况下,我应该怎么运行test.py,才能让它正确调用i_am_func函数?

首先我们进入tools文件夹运行,显然会报错,如下图所示:

ab546725e2022c8fb3d6ff6c640ac57b.webp

接下来,我们在项目根目录下面运行,也会报错:

98678fac15a40a6cc558814e44313a8f.webp

那应该怎么办呢?难道必须加环境变量或者改sys.path

其实,Python已经自带了正确运行工具脚本的方法,就是-m参数。我们只需要在项目根目录执行下面这个命令就可以了:

      python -m tools.test

如下图所示:

4a8ec81fc1393ec5610ba4db1c1afee0.webp

如果工具脚本在很深的文件夹里面,那么路径只需要使用点分割就可以了。例如下面的文件结构:

c152b24faf0f6e6f10ac8f517489b209.webp要运行second.py,那么命令就写成:

      python -m tools.deep.folder.second

如果你的工具脚本有参数,也可以正常添加,例如:

      python -m tools.deep.folder.second args1 args2


                                        往期回顾
                                            
                                            
                                              

1、 2024年:捂紧口袋,别瞎折腾

2、终于!淘宝能用微信支付了:不跳转,直接付!

3、推荐 3 个火火火火火的 GitHub 项目

4、 这个浏览器,想必只有开发者才会用吧?

5、拍视频每月花 2800 万,B 站新来的 UP 主有“亿”点强

                                              


                                          

点击关注公众号,阅读更多精彩内容

7002fd46465ba6cb1834ff7ff3b855ff.webp

浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报