相信初心们不少都会遇到这样的问题。python
自建模块放在项目中的公用模块包中,开发工具(pycharm或vscode等等)里面完美运行,上线或者在shell命令中却运行报错,找不到模块:shell
ModuleNotFoundError: No module named 'xxxx'
遇到这个错误的时候,我也曾很是苦恼 ...app
各类度娘 .....ide
多数方法基本无效...(也可能我太笨,或太背...)工具
在经历了2个半小时的挫折以后,决定本身解决...开发工具
在此分享一下我的解决方案。code
个人项目结构是这样的:图片
spider02:为项目根目录路径开发
spiders:为爬虫项目包,其下分N种爬虫。pycharm
_tools包:就是咱们全部爬虫公用的工具包了
那么问题来了。咱们该如何倒这个自建的工具包呢?
咱们都知道,倒包经常使用方式分两种:
以当前路径为准,输入目标模块 或 包的路径: from .._tools import xxx
以项目根目录为准,输入目标模块 或 包的路径: from spiders._tools import xxx
我的建议使用第二种方法。因此,咱们的导包须要这样倒:
from spider._tools import *
这样的好处就是,一切都以项目根目录为开始,比较统一,不容易出错。
说完了导包,咱们最后就来讲该怎么设置这个自建的模块包呢。
若是光有__init__.py文件的话,也只能说明他是一个可导的文件包。
若是你直接导入它的话,就会报错。由于,import须要搜索系统环境变量,来肯定所导包的位置。若是找不到,固然会报错 ...
直奔主题....
Mac系统的环境变量:
在下列文件中,添加你的项目绝对路径:
/etc/profile
/etc/paths
我的建议添加到第二个里面。
若是说你不想改变系统的,那么把项目绝对路径添加到私人环境变量中也ok:
/private/etc/paths
这是用户私人的全局,只要打开电脑,登录后,就会加载。
有人会说,你直接append不就好了么。
为想说的是;;;;
若是直接append的话,你就须要把
【每一个用到tools模块包,或是自建包下面的文件导其余自建包模块的时候,要在全部py文件中,都去写一遍append...】
好了,就写这么多....上班时候写的...见谅。
补充一句,任何项目中导包地方,都是以项目根目录为准的。