可能有很多人跟我一样在windows开发,在linux 部署程序。
这里记录一个我问到过的python ??榈既胛侍?,供大家绕道而行。
比如??槲募薪峁故钦庋?/p>
-data
--- init.py
---a.py
---b.py
---c.py
c.py 里面调用了a和b里面的函数。
在shell 里面运行
[root@localhost data]# python3 c.py
报找不到a和b里面的函数。
这是为什么呢?
本质的原因是你的系统环境里面没有加入自己这个文件夹的路径,程序找不到这个???。
所以,加入下面这几行代码。
import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
这是一般的常规操作。一般你这么做也就能解决了。但是当你这么做了之后,还是没法解决,你就傻眼了,网上所有的解答都是教你这么做就好,没人告诉你这样也不行怎么办。
重点来了!其实问题出在你的文件夹命名上。上面的代码块是把你的文件夹路径加入系统环境,但是这个路径大家看代码也看的出来,是加在了系统环境List的尾部。而程序从系统环境里面找依赖,是根据这个List 从头到尾找的,而你好死不死取了个 data 如此大众化的名称,如果在前面的其他路径里也找到了有data这个子路径的路径,那就根本不会去找你加在队尾的真正的文件夹路径了。所以,我们该怎么做?要么给你的模块名称取个酷炫的名字,导致不会跟其他的系统环境里面的路径撞车,要么,把这个路径塞在队头sys.path.insert(0, rootPath)
。这样问题就完全解决啦。