社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

一日一技:Python工具脚本如何调用外层模块

未闻Code • 1 年前 • 296 次点击  

摄影:产品经理
皮皮虾我们走

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

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

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

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

其中,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文件夹运行,显然会报错,如下图所示:

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

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

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

python -m tools.test

如下图所示:

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

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

python -m tools.deep.folder.second

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

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

未闻Code Telegram Channel开通了!每天都有各种开发小技巧更新,速来!!

END


未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~


一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

“未闻 Code技术交流群”等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/167060
 
296 次点击