1. 首页 > 技术教程 > 正文

Python 自动化:pip 源配置、虚拟环境与脚本运行指南

Python 自动化:pip 源配置、虚拟环境与脚本运行指南

搞 Python 自动化脚本,最烦的就是 `pip install` 卡住、依赖冲突、或者跑脚本时提示 `ModuleNotFoundError`。别问为什么,照着做就行。本文直接用实战步骤,解决 pip 下载慢、虚拟环境隔离、脚本定时运行这三个核心问题。主机选(zhujixuan.com)的 Linux 教程里,这类运维场景非常常见,尤其是 VPS 上跑爬虫或定时任务时。

Python 自动化:pip 源配置、虚拟环境与脚本运行指南的图片

一、pip 源配置:解决下载慢和超时

pip 默认源在国外,国内服务器下载经常超时。改源是最直接的提速手段。

1. 临时指定源(适合单次下载)

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

-i 后面跟镜像源地址,清华源速度稳定

2. 永久配置源(推荐)

mkdir -p ~/.pip

创建 pip 配置目录

cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF

写入配置,trusted-host 避免 HTTPS 证书警告

**常见报错**:`WARNING: Retrying (Retry(total=4, connect=None, read=None…))`
**解决办法**:检查网络是否能通外网,或者换成阿里云源 `https://mirrors.aliyun.com/pypi/simple/`。

二、虚拟环境:隔离依赖,避免冲突

生产环境里,不同项目依赖的 Python 版本或包版本可能冲突。虚拟环境是必选项。

1. 创建虚拟环境

python3 -m venv myenv

创建名为 myenv 的虚拟环境,会生成一个独立目录

2. 激活与退出

source myenv/bin/activate

激活后终端前缀会显示 (myenv),表示已进入虚拟环境

deactivate

退出虚拟环境

3. 在虚拟环境内安装依赖

pip install flask==2.3.0

安装指定版本的 Flask,只影响当前虚拟环境

**老鸟叮嘱**:千万别在系统 Python 里直接 `pip install` 全局包,尤其是用 root 用户。万一装错版本,可能导致系统工具崩掉。虚拟环境就是你的“沙箱”,随便折腾。

三、脚本运行:后台与定时任务

脚本写好之后,不能每次都手动 `python3 script.py` 跑。后台守护和定时执行是运维基本功。

1. 后台运行脚本(nohup)

nohup python3 /path/to/script.py > /path/to/output.log 2>&1 &

nohup 忽略挂起信号,& 放后台

> output.log 将标准输出写入日志

2>&1 将错误输出也重定向到同一个日志

**查看进程**:`ps aux | grep script.py`
**杀死进程**:`kill -9 PID`(PID 从 ps 输出里找到)

2. 定时运行脚本(crontab)

crontab -e

编辑当前用户的定时任务

在打开的编辑器中添加一行:

每天凌晨 3 点运行脚本

0 3 * * * /usr/bin/python3 /home/ubuntu/scripts/auto_backup.py >> /home/ubuntu/logs/backup.log 2>&1

**注意**:crontab 里尽量写绝对路径,环境变量和手动执行时不一样。

**常见报错**:脚本手动跑正常,crontab 跑没反应。
**原因**:crontab 默认 PATH 不包含 `/usr/local/bin`,需要脚本里用绝对路径或先 source 环境变量。

3. 使用 systemd 管理脚本(生产环境推荐)

sudo vim /etc/systemd/system/my_script.service

写入:

ini
[Unit]
Description=My Python Automation Script
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/script.py
WorkingDirectory=/path/to
User=ubuntu
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

然后启动:

sudo systemctl daemon-reload
sudo systemctl enable my_script.service
sudo systemctl start my_script.service
sudo systemctl status my_script.service

查看状态,绿色 active 表示正常运行

**老鸟叮嘱**:用 systemd 管理脚本时,`Restart=always` 很关键。万一脚本异常退出,systemd 会自动拉起来,省得你半夜爬起来重启。但要注意脚本里不要有死循环或内存泄漏,否则 systemd 会一直重启,把 CPU 打满。

FAQ

1. pip 安装包时提示“Could not find a version that satisfies the requirement”怎么办?

检查包名是否拼写正确,或者 Python 版本是否兼容。比如 `flask` 需要 Python 3.6+。另外,确认当前 pip 源里是否有该包,可以换成官方源试一下:`pip install 包名 -i https://pypi.org/simple`。

2. 虚拟环境激活后,`python` 命令还是系统版本?

激活虚拟环境后,`python` 指向的是虚拟环境内的 Python。如果没生效,检查是否执行了 `source myenv/bin/activate`,或者查看 `which python` 路径。

3. Linux 小白可以直接用 root 账号操作吗?

不推荐。root 权限太大,误操作可能导致系统崩溃。建议创建普通用户,需要管理员权限时用 `sudo`。虚拟环境也建议在普通用户下创建。

4. crontab 定时任务不执行,手动执行脚本正常,怎么排查?

先查看 cron 日志:`grep CRON /var/log/syslog`。常见原因:脚本路径写错、环境变量缺失、权限不足。解决方法:在脚本开头加上 `#!/usr/bin/env python3` 并 `chmod +x` 脚本,crontab 里写绝对路径。

5. nohup 后台运行的脚本怎么停止?

用 `ps aux | grep script.py` 找到进程 ID,然后用 `kill -9 PID` 强制停止。如果脚本卡住,`kill -15` 可能无效。

6. BBR 开启后为什么速度没有明显提升?

BBR 主要是优化 TCP 拥塞控制,对网络丢包严重的线路效果明显。如果本地带宽或服务器出口带宽本身就是瓶颈,BBR 也救不了。建议先测速:`speedtest-cli`。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9470.html 商家投稿邮箱:zhujixuanblog@qq.com