Python项目中无法导入自建模块包的问题!

Python项目中无法导入自建模块包的问题!

相信初心们很多都会遇到这样的问题。

自建模块放在项目中的公用模块包中,开发工具(pycharm或vscode等等)里面完美运行,上线或者在shell命令中却运行报错,找不到模块:

ModuleNotFoundError: No module named 'xxxx'

遇到这个错误的时候,我也曾非常苦恼 ...

各种度娘 .....

多数方法基本无效...(也可能我太笨,或太背...)

在经历了2个半小时的挫折之后,决定自己解决...

在此分享一下个人解决方案。



一、项目结构

我的项目结构是这样的:

输入图片说明

spider02:为项目根目录路径

spiders:为爬虫项目包,其下分N种爬虫。

_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...】

好了,就写这么多....上班时候写的...见谅。

补充一句,任何项目中导包地方,都是以项目根目录为准的。

猜你喜欢

转载自my.oschina.net/u/3826227/blog/1820692