ubuntu 16.04执行letsencrypt的时候报告错误“ImportError: No module named datetime”

网站一直使用 letsencrypt提供的 HTTPS证书,这个证书的问题在于每隔三个月就必须更新一次,本次更新证书的时候,提示如下错误:

错误发生的原因在于 letsencrypt自己构建了一个 Python的虚拟环境来隔离,但是早期建立的虚拟环境中是缺少部分软件包的,而自身的 BUG导致也没有重新更新虚拟环境,导致出现异常。

解决方法就是删除 letsencrypt自己构建的 Python的虚拟环境,然后继续执行脚本让他重建即可。

参考链接


TypeError: slice indices must be integers or None or have an __index__ method

执行如下 Python脚本时

会遇到错误信息

这个提示非常具有迷惑性,会让人不知所措。

其实非常简单

这行导致整个数组变成了浮点数格式的数组,可以试着打印出结果,就会发现整个里面的数字完全变成了浮点数。

而浮点数是不可以用来作为数组的下标的。

修改成如下方式即可

请注意最后的

函数,强制转换浮点数为整数。

参考链接


错误异常slice indices must be integers or None or have

如何用Python PIL获取图片的RGB数值

参考链接


如何用Python PIL获取图片的RGB数值

Python 2.7在调用自定义类函数时候报错"exceptions.TypeError: 'int' object is not callable"

Python 2.7中按照如下方式定义类

在执行脚本的时候会报告如下错误

造成错误的原因在于 Python 2.7中当类的成员变量跟方法名重名的时候,默认是使用类的成员变量,而成员变量是无法被调用的,因而导致报错。

解决方法就是避免方法名跟成员变量同名即可,比如上面的定义修改成如下方式即可

Python 2.7使用multiprocessing报错PicklingError: Can't pickle : attribute lookup __builtin__.instancemethod failed

Python 2.7中使用下面代码的时候

会报告如下错误:

这种错误发生的原因是 Python 2.7版本中的 multiprocessing模块的进程池部分存在 BUG,无法正常处理这种写法的代码,据说在 Python 3.4版本之后解决了此问题。

目前测试来看,不用 Python 2.7中的进程池,而是自己创建进程,自己管理进程的方式,可以比较简单的解决此类问题。

比如代码修改成如下样子,即可正常运行

至于多进程的管理,则只需要使用

引入 multiprocessing模块的 Queue,实现一个简单的生产者,消费者模型即可。

参考链接


python multiprocessing遇到Can’t pickle instancemethod问题

WARNING:libav.swscaler:Warning: data is not aligned! This can lead to a speedloss

Python中使用 libav视频解码的时候,如果需要更改最后输出的视频的宽高,比如如下代码:

可能会收到一条警告信息

导致警告的原因是 swscaler的缩放的目标尺寸不合适,它预期的大小是 16的倍数,这个倍数可以保证 swscaler以最高效的方式进行图片的缩放处理。

解决警告的方式就是保证宽高都是 16的倍数即可。

参考链接


[swscaler] Warning: data is not aligned! This can lead to a speedloss 的解决方法【FFmpeg】

Ubuntu 16.04下Python打印正在运行的进程的栈信息

Python程序在运行时候,可能由于某些原因导致进程卡住在某行代码上,此时我们需要输出进程中各个线程的栈信息。
此时我们需要使用 Python栈工具 pstack的协助,项目的工程地址https://github.com/wooparadog/pstack/

具体的用法如下:

python直接下载图片到内存

1. 使用 requests(推荐)

2. 使用 StringIO

3. 使用 io.BytesIO

参考链接


python直接下载图片到内存