解决办法

一句话,给搜索路径,代码在调用路人甲,就把路人甲的父亲路径加入即可,可以采取的办法1是绝对路径:

import os
import sys
sys.path.append("/home/kevin_xie/yifeinfs/pycharm_k/python_test/")

办法2是相对路径+sys的一些方法:

import os
import sys
__dir__ = os.path.dirname(os.path.abspath(__file__))
sys.path.append(__dir__)
sys.path.append(os.path.abspath(os.path.join(__dir__, '../..'))) # to get "/home/kevin_xie/yifeinfs/pycharm_k/python_test/"

详细说明

python提示找不到包怎么办?
比如我有如下的工程,里面有reco1包和reco2包,每个包里面还有sub包。在prfunction.py中有一个pr函数,我想在test1.py中去运行这个函数。
在这里插入图片描述
如果在pythcharm中,你可以这么写,没有问题,能找到包。

from reco1.sub.prfunction import pr
pr()

但你在终端执行,在/home/kevin_xie/yifeinfs/pycharm_k/python_test/reco2/sub2执行是执行不了的:


(py37) [kevin_xie@localhost sub2]$ pwd
/home/kevin_xie/yifeinfs/pycharm_k/python_test/reco2/sub2
(py37) [kevin_xie@localhost sub2]$ python test1.py
Traceback (most recent call last):
  File "test1.py", line 2, in <module>
    from reco1.sub.prfunction import pr
ModuleNotFoundError: No module named 'reco1'

或者你可以去/home/kevin_xie/yifeinfs/pycharm_k/python_test执行,也是不行的:

(py37) [kevin_xie@localhost python_test]$ pwd
/home/kevin_xie/yifeinfs/pycharm_k/python_test
(py37) [kevin_xie@localhost python_test]$ python reco2/sub2/test1.py
Traceback (most recent call last):
  File "reco2/sub2/test1.py", line 2, in <module>
    from reco1.sub.prfunction import pr
ModuleNotFoundError: No module named 'reco1'

推出方法,如果这么写,将想调用的包的父亲路径加入,就能寻找到了。

import os
import sys
__dir__ = os.path.dirname(os.path.abspath(__file__))
sys.path.append(__dir__)
sys.path.append(os.path.abspath(os.path.join(__dir__, '../..'))) # to get "/home/kevin_xie/yifeinfs/pycharm_k/python_test/"


from reco1.sub.prfunction import pr
pr()



Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐