UnicodeEncodeError: 'cp932' codec can't encode character '镜' in position 37: illegal multibyte sequence

Windows下,Python文件写入的时候遇到cp932无法处理的字符报错

1
2
3
4
# 文件写入
with open(fname, 'w') as result_file:

UnicodeEncodeError: 'cp932' codec can't encode character '\u955c' in position 37: illegal multibyte sequence
  • 解决方法
    1
    2
    # 文件写入时制定UTF-8编码
    with open(fname, 'w', encoding='UTF-8') as result_file:

nerf-pytorch执行示例报错:TypeError: type torch.cuda.FloatTensor not available. Torch not compiled with CUDA enabled. - MacStudio M1

nerf-pytorch安装后默认使用CUDA的张量进行运算。MacStudio M1下没有相应显卡和支持NVIDIA CUDA的库,所以报错。

1
2
3
4
5
6
7
8
% python run_nerf.py --config configs/lego.txt

Traceback (most recent call last):
File "/Users/d2l/nerf-hw/nerf-pytorch/run_nerf.py", line 876, in <module>
torch.set_default_tensor_type('torch.cuda.FloatTensor')
File "/Users/d2l/miniconda3/envs/nerf/lib/python3.9/site-packages/torch/__init__.py", line 323, in set_default_tensor_type
_C._set_default_tensor_type(t)
TypeError: type torch.cuda.FloatTensor not available. Torch not compiled with CUDA enabled.

解决方法:修改程序通过CPU运算。

1
2
3
4
5
6
7
8
9
10
11
12
# 进入nerf-pytorch目录编辑run_nerf.py,把torch.cuda.FloatTensor改成torch.FloatTensor
vi run_nerf.py

# diff如下
@@ -873,6 +873,6 @@ def train():


if __name__=='__main__':
- torch.set_default_tensor_type('torch.cuda.FloatTensor')
+ torch.set_default_tensor_type('torch.FloatTensor')

train()

安装nerf-pytorch报错:download_example_data.sh: line 1: wget: command not found - MacStudio M1

Mac下面默认没有wget导致脚本执行错误,安装homebrew和wget来解决。

1
2
3
4
5
6
7
8
9
10
# 终端安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 按照提示输入密码

# 设置brew环境变量
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/d2l/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

# 安装wget
brew install wget

MacStudio M1创建conda环境报错:ModuleNotFoundError: No module named 'chardet' - 动手学深度学习PyTorch版

conda create –name d2l python=3.9 -y 执行时报如下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
%conda create --name d2l python=3.9 -y
/Users/d2l/miniconda3/lib/python3.10/site-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
warnings.warn("Setuptools is replacing distutils.")
/Users/d2l/miniconda3/lib/python3.10/site-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils.
warnings.warn("Setuptools is replacing distutils.")

# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<

Traceback (most recent call last):
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/requests/compat.py", line 11, in <module>
import chardet
ModuleNotFoundError: No module named 'chardet'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/exceptions.py", line 1132, in __call__
return func(*args, **kwargs)
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/cli/main.py", line 69, in main_subshell
exit_code = do_call(args, p)
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/cli/conda_argparse.py", line 120, in do_call
module = import_module(relative_mod, __name__.rsplit('.', 1)[0])
File "/Users/d2l/miniconda3/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/cli/main_create.py", line 14, in <module>
from ..notices import notices
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/notices/__init__.py", line 3, in <module>
from .core import notices # noqa: F401
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/notices/core.py", line 16, in <module>
from . import fetch
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/conda/notices/fetch.py", line 8, in <module>
import requests
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/requests/__init__.py", line 45, in <module>
from .exceptions import RequestsDependencyWarning
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/requests/exceptions.py", line 9, in <module>
from .compat import JSONDecodeError as CompatJSONDecodeError
File "/Users/d2l/miniconda3/lib/python3.10/site-packages/requests/compat.py", line 13, in <module>
import charset_normalizer as chardet
ModuleNotFoundError: No module named 'charset_normalizer'

解决方法如下

1
2
3
4
5
6
7
8
9
10
11
# 安装chardet
python3 -m pip install chardet
# 查看chardet安装路径
python3 -m pip show chardet
...
Location: /Users/d2l/Library/Python/3.9/lib/python/site-packages
...
# 拷贝chardet包到miniconda目录下
cp -R ~/Library/Python/3.9/lib/python/site-packages/chardet ~/miniconda3/lib/python3.10/site-packages/
# 再次执行d2l环境创建命令,顺利完成
conda create --name d2l python=3.9 -y

学习环境配置 - MacStudio M1 - 动手学深度学习PyTorch版

学习环境配置
Mac上面需要事先安装好python3环境(在终端执行python3命令,会有是否安装的提示)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装Miniconda
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o Miniconda3-latest-MacOSX-arm64.sh
sh Miniconda3-latest-MacOSX-arm64.sh -b

# zsh初始化
~/miniconda3/bin/conda init zsh

# 关闭终端,重新打开,创建新环境并激活
conda create --name d2l python=3.9 -y
conda activate d2l

# 安装PyTorch及d2l包
pip install torch==1.12.0
pip install torchvision==0.13.0
pip install d2l==0.17.6

Zabbix触发大量报警邮件时的对策

Zabbix日志配置错误时有可能会发送大量的报警邮件,拖垮邮件服务器塞满邮箱。
可以采用以下步骤删除zabbix的待送信对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ssh登录Zabbix服务器,访问mysql服务

mysql -uzabbix -p zabbix
# 输入密码
# 查询待送信邮件数目
mysql> SELECT COUNT(*) FROM alerts WHERE status = "0";
# 更新待送信 为 已送
mysql> UPDATE alerts SET status = "1" where status = "0";
# 再次查询
mysql> SELECT COUNT(*) FROM alerts WHERE status = "0";
mysql> exit

# zabbix-server服务重启使修改生效
/bin/systemctl restart zabbix-server.service

Windows脚本小把戏-不停弹命令行窗口

  • 新建一个click-me.txt输入以下内容

    1
    2
    start cmd
    %0

    然后修改文件名为click-me.bat,点击后会不停的弹出命令行黑框,有种被攻击的赶脚。哈哈
    start cmd用于启动命令行窗口
    %0常用于在批处理宗获取脚本自身,但是这里的功能是无线循环,持续执行start cmd

  • Windows远程执行 tasklist/pslist/sc/taskkill 等命令 (例:远端机器名为srv-remote)

    1
    2
    3
    4
    5
    6
    7
    8
    # 远程查看进程列表
    tasklist /s srv-remote
    # 用pslist远程查看进程详细信息
    pslist ¥¥srv-remote -t
    # 用sc远程管理Windows服务
    sc ¥¥srv-remote stop snmp
    # 用taskkill远程关闭ID为9999的进程
    taskkill /s srv-remote /PID 9999

Rocky Linux 9安装Docker及Docker Compose

OS: Rocky Linux 9

1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新包管理器
sudo dnf check-update
# 添加官方包依赖
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 配置自启动
sudo systemctl enable docker
# 启动docker查看状态
sudo systemctl start docker
sudo systemctl status docker
# 验证docker compose的安装结果
sudo docker compose version

使用阿里云的开源镜像站解决CentOS6/7/8上面的过期源安装问题

阿里云开源镜像站找到需要的源。
以CentOS6的过期源为例:Centos-vault-6.10.repo

1
2
3
4
5
6
7
# 备份现有源配置
cp -p /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载CentOS6过期源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo
# 生成新缓存
yum clean all
yum makecache

Docker内执行 apt-get update 报错:Couldn't create temporary file /tmp/apt.conf.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apt-get update
Get:1 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease [1581 B]
Err:1 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease
Couldn't create temporary file /tmp/apt.conf.u0DRga for passing config to apt-key
Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Couldn't create temporary file /tmp/apt.conf.xzh9cs for passing config to apt-key
Err:4 http://security.ubuntu.com/ubuntu bionic-security InRelease
Couldn't create temporary file /tmp/apt.conf.N2fnMq for passing config to apt-key
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Couldn't create temporary file /tmp/apt.conf.JreIfD for passing config to apt-key
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [83.3 kB]
Err:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Couldn't create temporary file /tmp/apt.conf.QsK4tP for passing config to apt-key
Reading package lists... Done
W: GPG error: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease: Couldn't create temporary file /tmp/apt.conf.u0DR ga for passing config to apt-key
E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
....
  • 解决方法
    1
    2
    chmod 1777 /tmp
    apt-get update