0、关于
之前我介绍了自动做团课的GitHub项目,具体参考本站文章
使用GitHub项目自动做团课
https://blog.tsinbei.com/archives/83/
但是前段时间,我安装了Python 2的其他版本,把yum、firewalld直接弄炸,顺便把Python 3的环境搞坏了:安装了pip,但是把
/usr/bin/
下的软链接/usr/bin/pip3
删了,导致最后重装Python、yum、firewalld。
原本以为这样就恢复原状了,结果还挖下了巨大的坑,就是下文要讲的。
1、问题复现
报错信息参考GitHub Issue:
https://github.com/838239178/tk-auto-study/issues/63
1 | Traceback (most recent call last): File "main.py", line 18, in <module> encryptor = importlib.import_module(f"crypt_module.{crypt_name}.{crypt_name}_{crypt_mode}") File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/.../crypt_module/sm4/sm4_ecb.py", line 1, in <module> from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT ModuleNotFoundError: No module named 'gmssl' |
可以看到,这是很常见的问题:找不到模组,通常只要使用pip或yum安装即可。
2、错误排查
2.1、检查依赖
尝试使用
1 | cd /.../ python3 main.py |
直接启动程序。
经过测试,直接在命令行启动程序并不会报上述错误,且可以正常运行,说明已经安装了依赖。通过检查目录,确实已经安装,没有问题。
但是,把一模一样的命令复制到宝塔计划任务中执行,就会报错。
2.2、路径问题
尝试使用
1 | cd /.../ /usr/bin/python3 /.../main.py |
即使用绝对路径启动程序。
通过测试,在命令行中启动不会有问题,但是在宝塔计划任务中仍然存在该问题。
2.3、环境变量
导入环境变量到
/root/.bashrc
即在末尾加入
1 | export PYTHONPATH=/.../ |
执行
1 | source ~/.bashrc |
使其生效。
问题依然存在。
3、解决方法
经过排查,默认的Python 3版本为Python 3.9,环境变量也使用了Python 3.9,但是,不存在软链接 /usr/bin/python3.9
!
没有将程序软链接到/usr/bin/
下仍能执行,是因为我在
/root/.bashrc
下添加了:
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
也就是说,该目录下的程序都可以使用相对路径执行。
解决方法是将其删去,或执行
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
4、验证结果
再次测试,可以看到执行成功。
5、小结
有一说一,我并不喜欢该GitHub项目最近一次的更新。
加入了代理IP池,导致每次打开需要很久,通常需要试几十次才会有一个IP可用。
而使用代理IP的原因是因为福建共青团官网屏蔽外国IP,可能是有大量用户使用该项目的GitHub Actions打卡。
也正是因为这个原因,我把服务从GitHub Actions迁移到了服务器上,服务器在中国大陆境内,可以正常打开,速度非常快。
如果如此,我恐怕会把服务迁移回GitHub Actions。
Python 自动团课学习项目 本地运行提示 No module named xxx
评论