目录

一些常见的BUG与SKILL合集

一些常见的BUG与SKILL合集

bug1:找不到代码中的相关模块

起因是服务器前两天挂了个新盘,于是把数据和代码都迁移到了新盘。今天在新的目录下运行代码出现一个错误:项目中的一个模块(uer)找不到,经过前后盘算,深觉是迁移目录导致。

解决方案:设置pythonpath的目录,指向新目录:export PYTHONPATH="${PYTHONPATH}:/mnt/ext100/code/ET-BERT-main"


> PYTHONPATH 是 Python 的一个环境变量,用来指定 额外的模块搜索路径。 当在 Python 里写:

import some_module

Python 会按照以下顺序去找这个模块:

 1. 当前目录(你运行脚本的地方) 
 2. 标准库路径(比如 /usr/lib/python3.x) 
 3. site-packages(安装第三方包的地方)
 4. PYTHONPATH 变量中指定的路径

> 举个例子

临时添加路径
export PYTHONPATH=/home/user/myproject:/opt/others:$PYTHONPATH
这样 Python 会在 /home/user/myproject 和 /opt/others 里找模块。

> 分解说明

PYTHONPATH=
表示要设置一个新的 PYTHONPATH 值。
/home/user/myproject:/opt/others:
这里加了两个路径:
/home/user/myproject
/opt/others
这两个路径用冒号 : 隔开(在 Linux/Unix 下,路径列表用冒号分隔)。
这样 Python 在导入模块时会额外去这两个目录里查找。
$PYTHONPATH
这是把之前已有的 PYTHONPATH 值追加回来,避免覆盖原有设置。
(如果之前没设置过,这里就是空的,不会报错。)
export
表示把这个变量导出到当前 shell 的环境中,这样你在 当前终端里运行 Python 时才会生效。

> 验证

python3 -c "import sys; print(sys.path)"
会看到 sys.path 里包含了 PYTHONPATH 的内容。

> 常见使用场景 写了一个本地模块或库,不想装到全局 site-packages,就可以通过 PYTHONPATH 指定它的位置。
> 项目里有多个子目录需要互相导入,可以在启动时设置 PYTHONPATH,避免 ImportError。 在调试时,可以临时切换依赖路径。

skill2:如何把程序挂到后台同时又可以随时和程序交互

解决方案:使用screen命令,(平时经常使用nohup命令,但是该命令无法在终端进行交互)。

1. 启动一个新的 screen 会话
screen
进入一个新的全屏终端环境。

2. 启动并为会话命名
screen -S mysession
创建一个名为 mysession 的 screen 会话,方便后续管理。

3. 从 screen 会话中“分离”
在会话里按快捷键:
Ctrl + a  d
(先按住 Ctrl,再依次按 a 和 d)
这样不会关闭会话,而是把它放到后台继续运行。

4. 查看所有 screen 会话
screen -ls

输出示例:
There are screens on:
        12345.mysession (Detached)
        67890.pts-0.server (Detached)
2 Sockets in /var/run/screen/S-username.

5. 重新连接到指定会话
screen -r 12345
或者直接用会话名字:
screen -r mysession

当遇到会话后边有attached标志时:
 53862.move_file (2025年09月26日 13时29分43秒)   (Attached)
可以使用screen -d -r mysession强制接管该会话:
-d -r 的意思是:先把旧的会话 detach 掉,再 attach 到你当前的终端。

6. 在同一会话里创建多个窗口

在 screen 会话中:
Ctrl + a c → 新建一个窗口
Ctrl + a n → 切换到下一个窗口
Ctrl + a p → 切换到上一个窗口
Ctrl + a " → 显示所有窗口列表

7. 杀死会话
screen -X -S mysession quit
强制结束名为 mysession 的会话。

8. 退出会话
在会话的命令行中输入 exit
或者快捷键 Ctrl + d

9. 常见场景:运行后台任务
例如运行一个 Python 脚本,即使断开 SSH 也能继续:
screen -S longjob
python3 long_running_task.py
然后 Ctrl + a d 分离,任务仍在后台跑。