Python 自动团课学习项目 本地运行提示 No module named xxx

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
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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、检查依赖

尝试使用

Bash
1
2
cd /.../
python3 main.py

直接启动程序。

经过测试,直接在命令行启动程序并不会报上述错误,且可以正常运行,说明已经安装了依赖。通过检查目录,确实已经安装,没有问题。

但是,把一模一样的命令复制到宝塔计划任务中执行,就会报错。

2.2、路径问题

尝试使用

Bash
1
2
cd /.../
/usr/bin/python3 /.../main.py

即使用绝对路径启动程序。

通过测试,在命令行中启动不会有问题,但是在宝塔计划任务中仍然存在该问题。

2.3、环境变量

导入环境变量到

/root/.bashrc

即在末尾加入

Bash
1
export PYTHONPATH=/.../

执行

Bash
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

https://blog.tsinbei.com/archives/302/

文章作者
Hsukqi Lee
发布于

2022-04-10

修改于

2022-07-28

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
暂无