有一位同学提到了 Python 找不到模块的问题:
问题涉及到的代码结构和代码截图如下:
这个问题的解决方法非常简单,就是把start.py
文件从bin
文件夹移出来就好了。
但如果对这个问题进一步分析,可以看到更多问题。
MY_API
,所以他使用的编辑器VSCode 就会默认把MY_API
当做工作区。所以,当他在start.py
文件中写上from lib.interface import server
时,VScode 并不会给他标记红色波浪线。因为从 VSCode 的视角看,lib
文件夹确实就是在工作区下面的。start.py
文件时,Python 是从bin
文件夹下面运行的。此时,Python 会把bin
文件夹当做工作区。在工作区里面就只有这一个start.py
文件,所以当然找不到lib
文件夹。但如果大家经常逛 Github,就会发现,有些人可能是被其他垃圾语言污染了思想,他的 Python 项目,根目录有五六个文件夹和七八个.py
文件。你拿到这个项目的时候,你甚至不知道,当你想运行这个代码的时候,python3 xxx.py
应该运行哪个文件。你多方打听,或者看了半天文档,才知道,哦,原来入口文件在com/xx/yy/zz/script/run.py
。
run.py
文件,你发现它的顶部,文件导入的代码写的是from ../../../../aaa import bbb
。当你要启动这个项目的时候,直接在最外层python3 main.py
,就能把它启动起来。在main.py
里面,你可以导入其他模块,然后调用其他模块里面的类或者函数。
这样做的好处是什么?这样做,你是在项目的根目录启动的这个项目,所以你的工作区就是项目的根目录。那么你在任何一个.py
文件里面都可以很容易地基于工作区导入任意其他文件。例如,你现在在models/mongo-util/mongob_helper.py
文件中,你想导入utils/abc.py
中的time_format()
函数,那么,你只需要这样写就可以了。
你根本不可能出现需要导入父文件夹中的某个模块的情况。
只有工具脚本,才需要单独使用一个文件夹来存放,然后调用父文件夹中的其他文件。例如,我现在有一个工具脚本,它每天晚上0点会读写 MongoDB,清理无效数据,那么此时,我可以在根目录单独创建一个script
或tools
或者bin
文件夹,然后把工具脚本放进去,例如:
models/mongo-util/mongob_helper.py
文件中的某个函数。这种情况下,你调用父文件夹中的内容是可以接受的。但这毕竟只是工具脚本。__init__.py
当做它的入口文件。大家可以参考我在 GitHub - kingname/GeneralNewsExtractor: 新闻网页正文通用抽取器 Beta 版.[1]的代码组织结构。example.py
文件,用来演示如何调用这个包。而这个包本身的代码,是在一个叫做gne
的文件夹中的。这个gne
文件夹是一个包,它的入口文件在__init__.py
中。参考资料
GitHub - kingname/GeneralNewsExtractor: 新闻网页正文通用抽取器 Beta 版.: https://github.com/kingname/GeneralNewsExtractor
年度最火的文案
-
1).卧槽!Pdf转Word用Python轻松搞定!
-
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
-
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
-
4).80行代码!用Python做一个哆来A梦分身
-
5).你必须掌握的20个python代码,短小精悍,用处无穷
-
6).30个Python奇淫技巧集
-
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
-
8).再见Python!我要学Go了!2500字深度分析!
-
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何用python写一个猜谜游戏?10/28
- ♥ 如何为python安装包11/27
- ♥ 笑喷了,我用Python帮韦小宝选最佳老婆组合05/09
- ♥ 如何在python中编写csv文件08/12
- ♥ 我可以使用什么编辑器来编写 python 语句10/28
- ♥ 如何使用python的范围11/14
内容反馈