服务器运行Python出现ModuleNotFoundError的解决方案

问题描述:

项目在本地环境运行时,无报错。
但将项目提交至服务器运行时,出现ModuleNotFoundError:No module named 'packageA '错误。


项目场景:

python文件中引用了同文件夹下的另一个python文件作为模块

下面用一个简单的例子做个复盘,项目结构如下:

  • ProjectName
    • packageA
      • a.py
      • b.py

a.py如下:

from packageA import b

b.show() 

b.py如下:

def show():
	print("this is b") 

原因分析:

Python解释器在搜索路径中没有找到相应名称的模块,其中搜索路径是一个解释器会先进行搜索的所有目录的列表。


尝试1:

在packageA目录下创建__init__.py文件,此文件可以使得Python将packageA视为一个包而不是文件夹。

  • ProjectName
    • packageA
      • a.py
      • b.py
      • init.py

但添加此文件后服务器上运行依然报同样的错,无效。

尝试2:

Python的搜索路径存放在sys模块的path中,因此尝试将要引入模块的目录添加至sys.path。

于是我新建一个py文件,运行以下代码:

import sys
sys.path.append("xxx/xxx/packageA") #具体路径根据自己的项目结构进行修改
print("sys.path") 

运行完成后,在输出结果中看到了模块所在目录,转头运行a.py却依然报同样的错误。

这让我非常纳闷,明明模块所在目录已经添加至搜索路径sys.path,为什么还是不行呢?

后面我在某篇文章中发现这种方法导入的路径会在 Python 程序退出后失效。

因此,需要将上面的代码放入运行文件的顶端,这样每次运行都会添加目录至sys.path。

最后a.py修改如下:

import sys
sys.path.append("xxx/xxx/packageA") #具体路径根据自己的项目结构进行修改

from packageA import b
b.show()  

修改完成后,成功在服务器上运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值