作为python的小学生,在部署的时候总会遇到这样或者那样的问题,这不问题就来了
遇到这些问题就是考虑不充分,没有做好测试的表现,怎么能避免呢?
遇到python依赖的问题,因此项目是采用的crontab的方式执行的,所以在运行时才会发现报错。
先后遇到了缺少这些包
pip install pandas
pip install schedule
pip install requests
pip install pymysql
生产环境虽然使用了requirements.txt,在执行的时候也有列举了一些包,但在这里缺少以上的包
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
将这些包安装上以后,问题解决。
在执行过程中,还有遇到此问题
ModuleNotFoundError: No module named 'email.parser'
首先感觉是缺少依赖包,经排查依赖包并没有缺少,在网上搜查资料,说包冲突导致的,仔细检查后发现确实是包冲突导致的。
有个包的名字叫email,修改后问题解决。
当时就想本地测试怎么通过的?原来是pycharm自动安装了,在做应用开发的时候还在想,上线安装依赖包是个大问题,后来发现确实遇到了这个问题。
命名冲突的情况在本地也遇到过,但那个是文件命名冲突,进行修改后,本地测试也是通过,在生产环境又遇到了包冲突,这个有点费解。
那就归结于
可能是Linux和windows的区别?
还有由于python版本的区别?
本地windows版本3.6.6 Linux python 3.6.4
可能都有关系吧,后续有时间再做深入探讨。
避免这种包依赖的问题首先查看本地安装的哪些包
查看安装包的命令有
pip list
python -m pip list
pip freeze
以上三个都能找出相关的依赖包,但pip freeze的方式比较好,直接粘贴到requirements.txt
(venv) D:\work\sourceCode\python\pythonProject>python -m pip list
Package Version
--------------------- -----------
APScheduler 3.10.1
........
zipp 3.6.0
(venv) D:\work\sourceCode\python\pythonProject>
(venv) D:\work\sourceCode\python\pythonProject>pip freeze
APScheduler==3.10.1
......
zipp==3.6.0
(venv) D:\work\sourceCode\python\pythonProject>
将这些包放置在requirements.txt列表中就不会出现缺少包的情况了
针对包名冲突的问题,建议在测试环境做全量测试,这边测试环境匮乏,直接上生产,不仅容易出问题还不规范,建议和生产环境相同的版本进行测试,测试完成后上生产环境。