Python与Linux入门:从零搭建开发环境与命令行实操 1. 为什么要从 Python 和 Linux 开始1.1 这套组合到底意味着什么看到26期_01_Python Linux这个标题我第一反应是这又是一个面向零基础开发者的入门系列课程而且是整个系列的第一讲。Python 和 Linux 放在一起讲不是因为培训机构喜欢把两个热门词拼在一起而是这两样东西在真实开发场景里根本拆不开。我自己这些年接触过不少刚入行的同学很多人一开始只装了 Windows装个 Python 也能跑但一旦需要部署项目、处理定时任务、操作服务器日志、跑数据脚本就绕不开 Linux。业界常说写代码在 Windows跑代码在 Linux这是非常实际的体验。所谓一期课程的01通常意味着从零开始讲不假设你懂命令行不假设你配置过环境甚至不假设你了解什么是操作系统层面的文件权限。所以这篇内容适合谁适合刚接触编程、想把 Python 作为第一门语言同时想搞懂它和 Linux 如何协作的同学。也适合那些已经会写一点 Python 但从来没在 Linux 下部署过东西的初级开发者。你可以把它当作整个入坑路线的第一站。1.2 刚开始最需要解决的三个问题我在带新手的过程中发现Python 和 Linux 入门阶段最难的不是语法而是几个非常基础却绕不开的问题。第一个是环境问题。Python 有 2 和 3 的区别有不同版本有系统自带的 Python 和手动安装的 Python如果没搞清楚这些共存关系后面安装包、跑脚本会出现大量看起来莫名其妙的问题。第二个是工具链问题。很多人知道用 pip但不知道为什么同一个项目在这台机器能跑、换台机器就挂更不知道虚拟环境存在的意义。第三个是感觉问题。Linux 的命令行一打开就是黑底白字没有任何图形界面提示新手第一反应是我该干什么。这需要一个循序渐进的场景来引导而不是直接丢一本命令大全。这篇文章的思路就是围绕这三个问题展开先把 Linux 环境跑起来再把 Python 环境理清楚最后让两者在真实的小任务里配合起来。读完你会有一种原来如此的感觉而不是背了一堆命令。2. 内容整体设计与思路拆解2.1 为什么把 Linux 摆在 Python 前面很多零基础的课程会先讲 Python 语法再补 Linux但这里的设计顺序反过来了先让大家在 Linux 里待着边操作熟悉命令边引入 Python。这个安排是有道理的。先学一点点 Linux 基础比如 cd、ls、mkdir、vim 这几个命令后面在写 Python 的时候会非常自然地把文件路径、目录结构、执行权限这些东西串联起来。反过来如果你先用 Windows 写 Python 写了一个月突然切换到 Linux光是文件路径的风格差异和命令行的操作习惯就够你适应好一阵子学习曲线反而更陡。我自己试过一次快速切换教学方案让零基础学员先花三天熟悉 Linux 终端每天都用命令行创建文件、移动文件、编辑脚本然后再开始写 Python。结果这些人后面遇到路径拼接、跨平台部署问题的时候理解速度明显快过那些从 Windows 直接起步的人。因为 Linux 命令行天生就逼着你理解文件在哪里哪个程序在跑这些底层概念写代码时思路会更踏实。2.2 方案选型哪种 Linux 更合适对于刚接触 Linux 的同学选发行版确实是个容易纠结的事情。我的建议非常直接如果你是为了跟课程、打基础用 Ubuntu 或者 Debian 系就好原因是生态成熟、资料多、包管理器简单。日常中无论是安装 Python 相关的系统依赖库还是安装 Nginx、Redis 这类服务apt 一条命令基本都能搞定出问题的时候网上也有大量现成答案。很多初学者会问为什么不直接上 CentOS 或者更小众的发行版不是不能但没必要。入门阶段不要给自己增加额外的环境差异成本。实际工作生产环境用什么发行版那是公司架构师考虑的事情你自己学习阶段先把用 Linux 干活这个手感练出来更重要。我的建议是在虚拟机里装一个 Ubuntu Server 版本没有桌面环境逼迫自己在纯命令行下完成操作。很多人怕命令行但 Python 开发也好、后续的脚本部署也好日常操作都是在纯命令行下完成的早适应早受益。2.3 环境隔离意识要从第一天建立再来说说虚拟环境。这是整个入门过程中我认为最应该被提前灌输、却总被忽略的点。很多初学者装好 Python 后不管三七二十一pip install 直接装全局。这个习惯一开始看起来没问题但一旦你同时维护两三个小项目就会出现版本冲突A 项目用 2.x 版本的库B 项目需要 3.x 版本你在系统环境里装一个新版本可能就把 A 项目弄挂了。虚拟环境解决的就是同一个 Python 解释器但每个项目用独立的包空间这个问题。第一天就建立这个习惯并不难后面会减少大量不必要的麻烦。我见过不少同学因为环境混乱把半天时间花在排查为什么那个项目跑不了了上最后发现只是装了一个别的项目的依赖这种冤枉时间完全可以通过从一开始就建虚拟环境来避免。3. 核心细节解析与实操要点3.1 虚拟机还是 WSL动手之前得先解决我的 Linux 在哪儿跑的问题。目前对于 Windows 用户来说方案大致有三种安装虚拟机软件再装 Linux、使用 Windows 自带的 WSL、或者直接找一台闲置电脑装双系统。WSL 是目前我比较推荐的入门方式因为它不像虚拟机那样需要预分配内存和磁盘、启动速度也快你可以直接在 Windows 桌面环境里面打开一个 Linux 终端和本地文件系统之间的交互也方便。但 WSL 也有一个短板如果你后面要学 Linux 系统管理、内核相关的东西WSL 毕竟还是偏用户层的模拟和真正的 Linux 服务器会有一些细微差异。虚拟机方案比如常见的 VirtualBox 配合 Ubuntu更接近一台真实的 Linux 机器网络、存储、权限这些逻辑和服务器更一致。缺点是资源占用大、启动慢对电脑配置有一定要求。如果你的电脑内存小于 8GB跑虚拟机会有点吃力那就优先考虑 WSL。我自己做教学的时候一般建议电脑配置够的同学直接用虚拟机配置紧张的同学先用 WSL两条路都不影响后续学习。3.2 装好之后首先该做什么假设你已经装好了一个 Ubuntu 环境登录进去拿到一个命令行终端。按照我自己的习惯新环境到手做三件事第一更新系统软件源和已有软件包。Ubuntu 初始状态下用sudo apt update和sudo apt upgrade把系统包更新到最新这一步能避免后续装软件时遇到依赖版本过旧的问题。第二安装基础工具包。比如build-essential、curl、git、vim。这些工具不一定马上全用上但在后面编译 Python 扩展、拉代码、改配置文件的时候一定会需要。提前装好省得半路卡壳。第三确认自带 Python 状态。Ubuntu 22.04 和 24.04 系统默认带了 Python 3.10 或 3.12你可以直接执行python3 --version查看。这里注意一点系统自带的 Python 尽量不要删除或替换因为系统的很多管理工具依赖它。后面我们会用别的方式管理 Python 版本。3.3 文件结构与命令的记忆方法Linux 的学习里最容易让人挫败的就是命令太多记不住。这里我的观点是不要背要用。你只需要先掌握一条主线剩下的随用随查就行。主线命令大概就是pwd看当前目录、ls查看目录内容、cd切换目录、mkdir创建目录、touch创建空文件、cat查看文件内容、rm删除文件、cp复制文件、mv移动或重命名文件。这些命令涉及了文件和目录的整个生命周期日常 80% 的操作都被覆盖了。至于权限管理、进程管理、网络查询那些等用到了再针对性地学效果反而好。记忆方法和小时候记单词类似每次操作的时候想想这个命令是哪个英文单词的缩写。比如ls是 list列出、pwd是 print working directory打印当前工作目录、mkdir是 make directory建目录。理解了词源你会发现命令的本质就是告诉系统对你指定的东西做某个操作。3.4 权限概念为什么重要很多新手在 Linux 下执行脚本的时候会碰到一个报错Permission denied中文意思就是没权限。这个报错背后的原因是 Linux 的权限模型和 Windows 差别很大。Linux 系统里每个文件都有属主和属组的概念并且对文件的操作权限分为读、写、执行三种分别用 r、w、x 表示。当你试图运行一个没有执行权限的 Python 脚本时系统就会明确拒绝你。这在 Windows 下是没有的体验因为 Windows 默认对文件可执行性的判断更多看扩展名。我见过很多新手在这个地方栽跟头明明代码是对的但运行报错然后花大量时间去检查代码实际上只是忘记给脚本加执行权限。避免这个问题很简单要么用python3 script.py的方式直接调用脚本此时不依赖脚本的可执行权限要么用chmod x script.py赋予执行权限。理解权限模型的本质是 Linux 入门阶段必须跨过的一道坎。4. 实操过程与核心环节实现4.1 第一步建立项目目录我们用一个具体的小任务来演示创建第一个 Python 项目并且在其中跑通一段脚本。打开终端在 home 目录下建立一个名为first_project的项目文件夹cd ~ mkdir first_project cd first_project这里~代表当前用户的家目录对新手来说记住这个符号很有用因为它是一个绝对路径的快捷方式。在 Linux 下目录决定一切你的项目在哪里、脚本在哪里、日志在哪里都要有清晰的规划。先建一个专用目录避免把所有零散文件堆在根目录或用户目录下这是良好习惯的开始。4.2 第二步搭建 Python 虚拟环境创建好项目目录后在里面建立虚拟环境。我这里假设系统已经安装了 python3-venv 这个组件如果没有先执行sudo apt install python3-venv然后创建虚拟环境并激活它python3 -m venv venv source venv/bin/activate激活之后命令行前面通常会出现一个(venv)的提示符代表你当前正处在虚拟环境中。在这个状态下安装的所有 Python 包都会进到这个项目独立的目录里不会污染全局环境。这一步非常重要也是整个入门过程里最应该形成肌肉记忆的环节之一。如果哪一天你忘记了为什么创建虚拟环境可以回想这个例子项目 A 需要requests2.25 版本项目 B 需要requests2.31 版本如果不用独立环境两个需求是没法共存在一个全局环境里的。用虚拟环境各装各的互不影响。4.3 第三步编写第一个真正的脚本虚拟环境就绪之后我们写一个不是 hello world 的小脚本但也不复杂。我倾向于写一个带点实际处理逻辑的小程序比如批量重命名某个目录下的文件。这个任务用到 Linux 的目录操作和 Python 的文件处理能力正好把前面知识都串起来。先用touch创建几个文本文件模拟场景touch report_2024_old.txt touch report_2023_old.txt touch report_2022_old.txt现在目标是把这些文件名字里的_old去掉改成report_2024.txt这种格式。用 Python 实现方式如下# rename_files.py from pathlib import Path target_dir Path(.) for old_file in target_dir.glob(*.txt): if _old in old_file.name: new_name old_file.name.replace(_old, ) old_file.rename(new_name) print(f重命名: {old_file.name} - {new_name})保存文件后运行python3 rename_files.py这个脚本的核心是pathlib这个标准库它提供了一种面向对象的方式来操作文件和目录和 Linux 的文件系统概念天然契合。新手容易在这里犯的一个错误是直接用字符串拼路径但跨平台时路径分隔符不一样用pathlib可以很好地规避这类问题。4.4 第四步用 Shell 思维配合 Python再扩展一步我们在终端里用一条命令看看结果ls -la你会看到文件确实被重命名了。这时可以引出一个很有意思的思维Linux 的命令和 Python 脚本常常是配合使用的。比如你想对项目里所有 Python 文件做一个简单的代码统计可以直接用 Shell 命令wc -l *.py但不做复杂统计的话用 Python 处理更灵活。比如统计哪个文件行数最多可以写几行脚本from pathlib import Path lines_count {} for py_file in Path(.).glob(*.py): lines_count[py_file.name] len(py_file.read_text().splitlines()) print(max(lines_count, keylines_count.get))这就是用 Python 增强 Shell用 Shell 增强 Python 的日常使用的典型场景。整个开发过程不应该是必须全用命令行或者必须全写脚本而是两者结合哪个方便用哪个。4.5 第五步安装第三方库一个只依赖标准库的 Python 项目毕竟有限。我们再演示一下第三方库的安装。虚拟环境中安装通常直接使用 pippip install requests然后写一个简单的网络请求脚本测试它import requests resp requests.get(https://httpbin.org/get) print(resp.status_code) print(resp.text[:200])这里要注意HTTP 请求涉及外网如果网络环境受限可能超时选一个你本地网络能访问的接口即可。这个例子只是为了展示安装库—导入库—使用库的完整链路。另外提醒一下如果你看到pip不是最新版本的提示可以先用pip install --upgrade pip更新一下。但是注意不要随意升级系统级 pip最好在虚拟环境内操作。4.6 第六步把脚本变成可执行文件最后我们把写好的脚本变成一个可以从命令行直接执行的文件而不是每次都用python3 script.py调用。在脚本第一行加上 shebang 标记#!/usr/bin/env python3然后赋予执行权限chmod x rename_files.py现在你可以直接执行./rename_files.py这个做法在部署脚本到服务器时特别常用也是 Linux 下管理小工具的标准姿势。你可能会看到很多开源项目的命令工具都是这样设计入口的。理解了这个原理后面看别人项目的启动脚本就不会发怵。5. 常见问题与排查技巧实录5.1 命令找不到command not found这是最常见的一类问题。大概率原因是你输入的命令名不对或者这个软件还没安装。比如你输入pythonUbuntu 上默认系统只装了python3这时候就会提示 command not found。解决办法是先确认自己到底装了哪个版本ls /usr/bin/python*可以看系统中有哪些 Python 相关程序。如果没有安装可以用sudo apt install python3来装。这类问题不需要死记关键是理解命令来自于系统中的可执行程序文件这个底层逻辑你敲下的每一个命令都是在系统路径的某个目录里寻找对应的可执行文件。5.2 虚拟环境激活后 pip 仍是全局的有时候你明明激活了虚拟环境但是敲pip时发现并不是虚拟环境内的版本。通常是因为你曾经在~/.bashrc或者某个配置里设置了别名或者激活的环境变量没有被正确优先级处理。排查方法很简单执行which pip看输出路径。如果路径指向/usr/bin/pip而不是虚拟环境目录下的venv/bin/pip说明你用的不是虚拟环境里的 pip。这种情况下重新检查激活命令source venv/bin/activate然后再次运行which pip正常情况会指向虚拟环境目录。养成用which验证的习惯能帮你快速定位各种命令行为不对的问题。5.3 安装包时出现外部管理环境错误新版 Ubuntu 里系统 Python 的 pip 被限制安装了因为它自带的 Python 环境受系统包管理器管控。如果你执行pip install requests时遇到externally-managed-environment这样的报错不用慌张。最优解是先建虚拟环境再在虚拟环境内部安装这样绕开系统级别限制也符合项目隔离的理念。如果你确实需要全局安装且知道自己在做什么可以加--break-system-packages参数但我不推荐新手这样做。这个错误本质上是一个保护机制告诉你别动系统环境实际上是在帮你养成好习惯。5.4 文件权限导致的运行失败前面提过 Permission denied 的问题。不少同学写完 Python 脚本一执行./script.py就遇到这个错误。排查步骤很简单先执行ls -l script.py查看文件的权限位。如果显示的权限是-rw-r--r--说明属主没有执行权限就需要chmod x script.py来补上。还有另一种情况你在 Windows 下用编辑器写好的脚本传到 Linux 里发现运行报错/usr/bin/env: python3\r: No such file or directory。这是因为 Windows 保存的文件换行符是\r\nLinux 只识别\n。解决办法是用sed -i s/\r$// script.py去掉回车符或者在编辑器里把换行符改成 LF。这类问题是 Windows 和 Linux 混用的初学者最容易踩的坑。5.5 端口被占用的问题过几天你会开始写 Web 服务比如 Flask 或 FastAPI 的小项目这时候大概率会遇到端口被占用的问题。报错内容是类似Address already in use。排查方法是先用ss -ltnp看当前监听端口的进程找到对应的 PID 之后用kill命令结束它。这里我的建议是不要直接杀掉系统里不认识的进程得先看清楚这个进程是什么、能不能杀。确认后才能执行清理操作。如果只是为了开发可以直接使用另一个端口。这个排查思路对所有某个端口起不来的问题都适用。5.6 常见问题速查表为了方便随时翻阅我把上面这些情况整理成一个速查表现象可能原因快速排查解决办法command not found软件未安装或命令名错误ls /usr/bin/命令*安装对应软件或换正确命令Permission denied文件缺执行权限ls -l 文件名chmod x 文件名换行符导致的报错文件是 Windows 格式cat -v 文件名sed -i s/\r$// 文件名pip 装包受限制系统 Python 受管理which pip创建虚拟环境再安装端口被占用另一进程占用端口ss -ltnp换端口或结束对应进程虚拟环境失效未正确激活或配置冲突which pip重新source activate并检查5.7 两个排查思路层面的建议最后补充两个我自己总结的排查哲学。第一遇到问题先看报错信息本身。报错信息里往往已经告诉了你原因和位置不要急着去改代码或重新安装环境。新手最常犯的毛病是看到报错就慌然后卸载重装。其实大多数问题都是一行命令就能解决的小事情。第二学会用最小复现去定位问题。如果你不知道 bug 出在哪就创建一个最简脚本逐步添加逻辑看哪一步触发问题。这个思路不只是排查技巧也是调试代码和设计系统的核心思维。很多经验丰富的开发者之所以解决问题快不是因为记忆力好而是因为他们懂得把大问题拆成小步骤逐一验证。6. 经验感想与后续路径6.1 我踩过的一些坑说几个我早期学习 Python 和 Linux 时印象深刻的经历也算给你们提个醒。最开始我用的是 Windows装了一个很老版本的 Python然后按照网上教程装了一堆包。后面配合 Linux 使用时发现很多命令行为不一致最后才明白是 Python 版本差异造成的。当时浪费了一个下午排查一个同一个代码两个环境结果不一样的问题。现在回想起来如果早点用虚拟环境、早点统一版本可能五分钟就解决了。后来我慢慢形成一个习惯每个新项目的第一件事是写好说明文档把 Python 版本、系统版本、依赖包列表记清楚。有了这份说明书项目在任何新环境上都能快速重建。你们现在可能觉得这个动作多余但等到你同时维护三个项目、并且每隔几个月就要换电脑或重装系统的时候会发现它是真正的救命稻草。6.2 下一步可以怎么走这一期内容属于整个路线的起步覆盖了 Linux 基本操作、Python 环境搭建、虚拟环境、简单脚本以及常见问题排查。接下来我认为有两个明确方向可以继续深入。第一个方向是继续加深 Python 的项目能力。比如用 Flask 写一个简单的 Web 接口再把前面学的 Shell 命令和 Python 脚本结合起来做一个自动化的定时任务。第二个方向是往部署方向走学会用 Git 管理代码再把项目部署到一台远程服务器上让它的服务真的跑起来。这两个方向里前者更偏写代码后者更偏运维但都会用到这期的基础功。这里我还特别想强调一个事情记笔记的方式。建议你从这期开始维护一个命令速查笔记把见过的每一条有用的命令和用法记录下来。不要过分依赖搜索引擎因为很多知识你查过一遍后过段时间还是会忘但自己整理过的东西记忆会深刻许多。这个笔记不用很正式随手记即可关键是坚持。6.3 保持节奏比天分重要我接触过的很多学习者在前期都会有这样的体验第一周热情高涨第二周开始被细节绊住第三周遇到一个卡住一晚上的问题就想放弃。这太正常了。Linux 和 Python 的知识体系是典型的面太广、上限太高但入门门槛其实并没有想象中那么高。你不需要一天内掌握所有命令也不必对着复杂的权限模型死磕。把前面提到的核心流程走一遍每天积累一点点手感之后的进阶会是水到渠成的事情。这一期的内容到这里就结束了。我的个人建议是先把环境搭起来把今天的脚本敲完然后尝试着自己改一改——比如让重命名脚本支持多个目录或者把统计脚本的输出排序。自己动手写过一遍和看别人写过一遍学到的深度完全不一样。