`

python开发中解决: No module named xxx

阅读更多

 

 python开发中 No module named xxx  ,是比较常见的问题,今天只探讨其中的一种情况:

同一目录内,a.py 无法import b.py 产生的No module named b 

 

同一文件夹内,新建a.py无法导入已存在的b.py

import b

 我的pthon环境:

python3.9  官网下载的zip包

pycharm 2022.1

折腾了三天三夜,都难以解决。

在折腾的过程中,也算是了解到了一些东西,记录下来。

 

import导入py模块,这个文件明明存在,肉眼可见的存在,但python解释器就是找不到。

核心原因很简单,当前目录不在python解释器执行搜索目录中,说到这里就不得不到提到一个东西:sys.path , sys是python内置库。python解释器搜索路径是按sys.path列表进行

来打印看看:

import sys

print('sys path:', sys.path)

 你检查一下,当前py文件目录是否存在。确实没有当前目录

 

 

解决办法:

1、sys.path中添加当前目录

import sys

sys.path.append('')

 这是什么鬼

>>> import sys
>>> sys.path
['', '/opt/ros/melodic/lib/python2.7/dist-packages', '/home/xxx/anaconda3/lib/python37.zip', '/home/xxx/anaconda3/lib/python3.7', '/home/xxx/anaconda3/lib/python3.7/lib-dynload', '/home/xxx/anaconda3/lib/python3.7/site-packages']
>>>

 看到没,你的sys.path中有一个空字符。因为这个空字符串的存在,import时他就能从当前目录中查找python模块;

 

2、把当前目录加入sys.path中,也可以这样写:

import sys , os


sys.path = [os.path.dirname(__file__)] + sys.path

 

以上方法1、2都可以解决import找不到已定义py模块问题。但是,项目中文件目录多了,每个py文件都写这,显得非常不python。。。 

于是:

 

3、还有人,认为应该删除python目录下的pth文件。

类似这样的: python39._pth 

不过我没有测试这个方法,我认为这些方式都是不够好的解决方式。

 

 

 

我认为是因为:

我的python解释器采用zip包解压,添加到系统path中这种安装方式,导致的环境不兼容。

 

于是,

删除zip这种方式安装的python,重新下载了exe格式的python安装,问题也得到了解决,同目录内的自己写的py文件就能import

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics