Python小技之自定义不同文件夹下模块导入问题
一般在写一个项目的时候, 为了将项目模块化, 更加的清晰明了, 会将不同功能的模块放入不同的文件夹

项目如下:
1 | ├── spider |
downloads.py内容如下:
1 | def download(): |
spider.py内容如下:
1 | from ..utils.downloads import download |
一切看起来都是那么美好

当你试图运行

问题一出现:
1 | cd spider |
会得到:
1 | # 相对导入超出顶级包错误 |
但是你试图把相对路径去掉时, 又会得到:
1 | # 找不到这个模块 |
尝试解决:
在spider.py文件第一行加入:
1 | import sys |
输出:
1 | > import download |
问题二:
mgd, 终于解决了,
but, 一般爬虫脚本, 要用crontab或其他定时调用脚本时, 要使用绝对路径
在根目录或家目录下试一下:
1 | python3 /Users/msw/Desktop/wx_post/py_module/spider/spider.py |
结果, 不出意外, 咦~~~~~~~
1 | Traceback (most recent call last): |
于是:
在spider.py再加入一行
1 | sys.path.append("/Users/msw/Desktop/wx_post/py_module/") |
在运行一下:
1 | > import download |
果然可以了, 但是不能把所有的路径都添加一边吧, 大神到这步应该就知道怎么解决了吧

解决:
其实, 说来说去, 根本问题就是脚本工作目录的问题, 也就是在那里启用的脚本
方案一:
改变目录结构, 内容保持一致, 如下:
1 | ├── spider.py |
spider.py, 内容如下:
1 | from utils.downloads import download |
方案二:
目录结构保持不变
在spider/spider.py, 开始处加上以下内容:
1 | import os |
其实就是改变了, 脚本工作目录

喜欢麻烦点个在看哦!
作者:
胖胖不胖
版权声明:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不止于python
感谢您的支持,我会继续努力!
微信支付
支付宝