如果发生importError,如何使程序包在剩余的sys.path中进行搜索?

时间:2019-05-04 10:19:01

标签: python-3.6

我正在尝试导入目录sns.distplot(s['size'], bins = len(s)) 中存在的软件包import http.client,但是当我尝试将其导入python脚本文件并执行该文件时,它显示/usr/lib/python3.6 < / p>

我尝试进一步调试,发现sys.path的顺序是罪魁祸首。

ModuleNotFoundError: No module named 'http.client'

输出为:
import sys print ('\n'.join(sys.path)) import http print (http.__file__) import http.client

print ('\n'.join(sys.path))

/root/.pycharm_helpers/pydev /usr/lib/python3/dist-packages/fire /root/.pycharm_helpers/third_party/thriftpy /root/.pycharm_helpers/pydev /usr/lib/python3.6 and so on...
print (http.__file__)

由于/usr/lib/python3/dist-packages/fire在实际路径/usr/lib/python3/dist-packages/fire之前,并且也存在“ http”目录,但是没有导致此错误的客户端文件。

现在我的问题是如何包含/usr/lib/python3.6,如果importError发生了,那么它应该尝试找到其余的import http.client,以便即使在{{1 }}应该再试一次,并且在转弯sys.path时,它将成功导入。

还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以命名要从中导入模块的软件包。 所以类似from http import client as http.client的东西将起作用。 同样也不能那样,因为您可以调用模块,但是您希望像例如hc这样的代码,并且希望在后面的代码中简短地使用http.client.somefunction()来引用hc.somefunction()