Python这几年是真的火,凡是跟代码沾点边的岗位,基本都绕不开它。不光是科班学计算机的在用,做运维的、搞数分的、测接口的、写自动化脚本的,甚至做设计的都在学Python。原因很简单,语法门槛低,生态又大,想做什么基本都能找到现成的库。但初学者最容易卡住的地方,往往不在语法本身,而是装环境、配变量、装依赖这些"地基"环节。不少朋友兴致勃勃地打开教程,结果连python都运行不起来,热情瞬间就凉了一半。这篇内容就是给刚上路或者半路卡壳的朋友准备的,围绕Python基础这条主线,把环境搭建、核心语法、虚拟环境、爬虫入门、数据处理、打包exe这些高频场景一次说清楚,并且把我会踩过的坑也一并交代了,希望能让你少走点弯路。
1. 环境搭建:Python基础的第一道关,真的别马虎
1.1 下载安装的正确姿势,以及Python官网到底怎么进
很多人提到装Python,第一反应是去搜索引擎输"python下载",然后随便点一个看起来像官网的链接。这里我建议你直接记住官方地址:python.org,打开后把鼠标放到Downloads菜单,它会自动识别你的操作系统,比如Windows、macOS、Linux,直接点击对应版本下载就行。千万别去第三方下载站,那些网站经常捆绑一堆广告软件,下载的也可能不是完整版,有的还携带病毒,得不偿失。
下载的时候会看到一堆版本号,什么3.12.x、3.11.x,新手往往一脸懵。我的建议很简单:选最新的稳定版,也就是版本号是偶数或者至少已经发布半年以上的。以我写这篇文章时的情况为例,3.11和3.12都是非常稳妥的选择,3.13刚出来时最好不要盲目尝鲜,因为一些第三方库可能还没来得及适配。记住一个原则:Python基础阶段,稳定比新功能重要得多。
Windows安装的时候,有一个勾选项叫"Add Python to PATH",这个一定要勾上。如果漏了这一步,安装完之后在命令行敲python就会提示"python不是内部或外部命令",很多人卡在第一步就是栽在这。安装路径建议保持默认,也可以自己换一个纯英文路径,不要放在带有中文或者空格的目录下,否则后续装库和写项目容易出各种莫名其妙的编码问题。
macOS用户要注意,系统自带的Python版本通常比较老,也别去碰它,直接去官网下载安装包即可。Linux用户一般系统里自带Python 3,但版本不一定够新。这里我多说一句,Linux上不要轻易卸载系统自带的Python,因为很多系统工具依赖它,卸载后系统可能直接出问题。正确的做法是用官方源码编译安装,或者用包管理器装新的版本,让新旧版本共存。
1.2 环境变量配置与多版本共存的实操经验
环境变量被称为PATH的机制,说穿了就是告诉系统,你去哪里找python这个程序。Windows用户如果安装时忘了勾选"Add Python to PATH",也不要慌,可以手工配置。右键"此电脑"→"属性"→"高级系统设置"→"环境变量",然后在系统变量里找到Path,点击编辑,新增两条路径:一条是Python的安装目录,另一条是安装目录下的Scripts目录。前者让python命令生效,后者让pip命令生效。
很多人配完环境变量之后,明明路径写对了,命令行还是找不到,十有八九是配置完没有重新打开终端。环境变量的修改需要新开的命令行窗口才会生效,旧窗口里的环境信息还是旧的。这是我见过不下十次的问题,每次都要提醒一下:改完环境变量,记得把命令行窗口全部关掉重开。
再来说多版本共存的话题。有些朋友机器上已经装了Python 3.9,但项目需要3.11,又不想卸载旧的,这时候怎么办?Windows下建议用官方提供的Python Launcher,也就是py命令。安装新版Python的时候会自带这个工具,之后你可以在命令行输入"py -3.11"指定用3.11版本,输入"py -3.9"指定用3.9版本,输入"py"则默认使用最新版本。Linux上的做法类似,用update-alternatives工具来切换默认版本,但也是建议用虚拟环境来解决版本隔离问题,后面我会专门讲。
另外,Python安装目录下通常还有pip,它是Python的包管理工具,负责安装第三方库。检查安装是否成功,可以在命令行依次输入"python --version"和"pip --version",如果能正常输出版本号,说明环境OK。如果pip提示找不到,检查一下Scripts目录有没有加进PATH。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Python基础语法:先跑起来,再谈优雅
2.1 变量、基本类型和类型转换,别跟强类型语言较劲
Python是一门动态类型语言,这意味你不需要像Java或C++那样提前声明变量的类型。你写一句"a = 10",Python就知道a是整数;再写一句"a = 'hello'",它又自动把a当作字符串。这种灵活性对新手极度友好,写起来非常丝滑,但带来的隐患是,你自己得时刻清楚每个变量当前到底是什么类型,否则很容易在类型不同时做一些危险操作。
Python里最常用的基础类型有整数int、浮点数float、字符串str、布尔值bool,还有列表list、元组tuple、字典dict、集合set。这里我不打算把每种类型的API都罗列一遍,而是说说最容易出错的类型转换。举个我自己例子,刚开始学的时候,我从命令行用input()读取用户输入年龄,然后直接和数字比较,结果程序直接报错。原因很简单,input()读取的永远是字符串,必须用int()把它转成整数才能比较。这就是"python类型转换"这个问题出现率极高的原因。
python复制age = input("请输入年龄:")
print(type(age)) # <class 'str'>,注意是字符串
age = int(age) # 转换成整数
if age > 18:
print("已成年")
这段代码看着简单,但你要记住一个核心原则:字符串和数字之间不能直接做算术运算,要用int()、float()、str()这些函数显式转换。还有一个常见坑是,把字符串转整数时如果字符串内容不是合法的数字,比如int("abc"),程序会抛出ValueError异常。所以做转换之前,最好先用isdigit()方法判断一下字符串是否全由数字组成,或者在try/except里捕获异常。这在写爬虫清洗数据时尤其常见,从网页拿到的价格、数量经常带字符,直接转换必炸。
2.2 条件判断和循环:程序逻辑的基本盘
有编程基础的朋友都知道,任何程序的逻辑都离不开顺序、分支、循环这三件事。Python里的分支用if/elif/else表示,语法上最大的特点是没有大括号,完全靠缩进来界定代码块。这个设计让代码看起来非常清爽,但代价是缩进千万不能乱。同一个代码块里混用空格和Tab,大概率会直接报IndentationError,我建议你用的编辑器都统一设置成"用空格代替Tab",缩进量固定4个空格,这是Python社区最通用的约定。
循环有for和while两种。for循环通常用来遍历一个可迭代对象,比如列表、字符串、range范围等。而while循环更强调条件,只要条件为真,就一直执行。以一道很经典的编程练习题"李白打酒"为例:李白拿着酒壶出门,遇到酒店就把酒量翻倍,遇到花就喝掉一斗,最后遇到花喝完刚好壶中无酒。问原来壶里有多少酒。这题用for循环反推很方便,从最后一步逆推回去。这种小题目非常推荐新手拿来练习,因为它强迫你用循环和条件去表达一个完整的逻辑链条,而不是死记语法。
python复制wine = 0 # 最后喝光了
# 倒着推回去:遇到花喝掉一斗,所以之前要多一斗;遇到店翻倍,所以之前是当前一半
for i in range(10): # 假设共10次动作
if i % 2 == 0:
wine += 1 # 逆推遇花
else:
wine /= 2 # 逆推遇店
print(wine)
当然,这个题的具体步数和顺序可以再考究,重点是体会循环加条件的组合方式。初学者做这类题,千万不要急着写代码,先在纸上把逻辑捋清楚,再翻译成代码,效果会好很多。我辅导过不少朋友,发现他们写不出代码往往不是语法不会,而是逻辑没想清楚,这个习惯要尽早养成。
2.3 函数与模块:别把代码全堆在一个文件里
Python基础入门到一定程度,你一定会接触到函数。函数的作用是封装一段可复用的逻辑,避免同样的代码反复抄来抄去。定义函数用def关键字,比如"def add(a, b): return a + b"。参数和返回值是函数的核心,参数是为了让函数处理不同的输入,返回值是把结果交给调用方。这里面有个概念很容易被新手忽略,就是可变对象与不可变对象在函数参数传递时的差异。简单说,整数、字符串、元组这类不可变对象在函数内部修改不会影响外部,而列表、字典这类可变对象在函数内部修改会影响外部。这个坑我在写接口测试脚本时踩过,改了几百行代码,最后发现问题出在函数里改了传入的列表。
模块的概念,本质上就是把多个函数、变量、类组织到一个.py文件里,然后用import引入。Python的第三方库生态极其丰富,比如后面要讲的requests、pandas、matplotlib,都是通过import来使用的。装好第三方库后,在代码文件开头写import requests,就能用这个库了。import语句最好写在文件最顶部,这也是PEP8代码规范的基本要求。另外要提醒一句,自己写的.py文件名尽量不要跟第三方库重名,比如你把文件命名成requests.py,然后在里面import requests,Python会优先加载你自己写的文件,导致各种诡异的问题。
3. Python虚拟环境:多项目共存的必备生存技能
3.1 为什么一个Python解释器管理很多项目会乱套
不少初学者会问,我学Python基础阶段,有必要搞虚拟环境吗?我给出的回答是:非常有必要,而且越早习惯越好。虚拟环境解决的问题是依赖隔离。打个比方,你正在做项目A,它需要requests库的2.x版本,另一个项目B是半年前写的,依赖的是requests的1.x版本。如果所有库都装到同一个全局环境里,装B的依赖时就会把A的requests升级或降级,A可能直接跑不起来。更极端的例子是,有的库要求numpy必须是1.21,而另一个库要求numpy不能低于1.24,这种冲突在全局环境下根本无法共存。
虚拟环境就是在你的项目目录下创建一个独立的Python环境,这个环境里安装的包只属于当前项目,互不干扰。你完全可以为每个项目建一个环境,需要什么装什么,不影响了。刚开始可能觉得多此一举,等项目多了你就会发现,没有虚拟环境的项目早晚会把你逼疯。有个真实情况我印象很深:有次帮朋友排查一个问题,他的项目之前能跑,几天后突然报numpy版本冲突。查了一下,原来是他后来装了一个新库,直接把全局环境里的numpy升级了,旧项目就崩了。这就是典型的没有隔离环境导致的悲剧。
3.2 用venv创建和激活虚拟环境,关键就这几条命令
Python官方自带的venv模块,是最轻量、最推荐的选择。在项目目录下打开终端,执行下面这条命令,就会在当前目录生成一个名为venv的文件夹,里面是一个完整的虚拟Python环境。
bash复制python -m venv venv
创建完成后,Windows下激活环境的命令是venv\Scripts\activate,Linux和macOS下是source venv/bin/activate。激活成功之后,命令行前面会出现一个(venv)前缀,提醒你当前正处于虚拟环境。这时候你用pip安装的任何包,都会被装进这个项目的虚拟环境里,而不是全局环境。离开时执行deactivate即可退出。
很多人会在虚拟环境里遇到pip命令报错或者找不到模块的问题,我的排查经验是先确认环境是否真的激活了,再看当前python和pip来自哪里。可以用"where python"(Windows)或"which python"(Linux/macOS)查看路径,如果路径指向venv目录,说明环境已经生效。另外,平时习惯用IDE的朋友要注意,像VS Code和PyCharm都需要手动选择解释器,指定到venv目录里的python.exe,否则终端里明明激活了环境,IDE运行却还是用的全局Python,这属于非常经典的配置错误。
虚拟环境配好之后,还要养成一个习惯:项目用到的所有依赖,用"pip freeze > requirements.txt"导出到一个文件里。别人拿到这个文件,只要执行"pip install -r requirements.txt",就能一键复现你的依赖环境。这是Python项目协作和部署的基础操作,也是我从实际项目里学到的经验:没有这个文件,换台电脑跑项目就是一场灾难。
4. Python基础实战方向:爬虫、数据处理与小游戏
4.1 爬虫入门:requests和解析网页的基本套路
Python最出圈的用途之一就是爬虫。很多人就是冲着"抓取网页数据"来学Python的。爬虫的基本思路其实不难:先向目标网页发起请求,拿到HTML内容,再从中提取需要的信息。初学者最常用的组合是requests加BeautifulSoup4。这里我用一个非常简化的例子说明大概长什么样。
python复制import requests
from bs4 import BeautifulSoup
url = "https://example.com"
resp = requests.get(url)
resp.encoding = "utf-8"
soup = BeautifulSoup(resp.text, "html.parser")
for item in soup.select("h2"):
print(item.get_text(strip=True))
但我要强调一点,教程归教程,实际写爬虫时一定要有分寸感。抓取数据前先看看网站的robots.txt,尊重网站声明,不要高频访问,不要爬取个人隐私或敏感信息,更不要拿无关网站做压测。初学者学习爬虫,建议在爬虫模拟站点上练习,或者爬一些公开的、允许抓取的站点,比如自己的博客、公开的新闻RSS,这样既练习了技术,也不会惹麻烦。requests库使用的时候很容易遇到编码问题,网页声明是utf-8,但实际内容却是gbk,这时候可以用resp.encoding手动设置编码。这个坑我踩过很多次,看到乱码先别怀疑人生,大概率就是编码没设对。
4.2 数据处理与可视化:pandas和matplotlib快速上手
Python数据分析是另一条大路,而在数据分析领域,pandas和matplotlib是最常用的两个库。pandas提供DataFrame数据结构,可以把它理解成表格,能方便地做筛选、排序、分组、聚合等操作。热搜里有一个问题很有意思:"python创建表格怎么只能65536"。这个限制其实是老版Excel格式.xls的行数上限,65536行。如果你用pandas的to_excel方法写数据,指定引擎为openpyxl并保存为.xlsx格式,就不会有这个限制。很多新手被这个数字卡住,就是因为用了旧的格式或者错误的写入方式。
python复制import pandas as pd
df = pd.DataFrame({"姓名": ["小明", "小红"], "成绩": [88, 95]})
df.to_excel("成绩表.xlsx", index=False, engine="openpyxl")
pandas的groupby是另外一个特别常用的操作,它对应SQL里的GROUP BY,用来按某列分组然后做聚合计算,比如按城市统计平均值、按性别统计人数等。初学者容易分不清groupby之后需要用哪种聚合方式,比如sum、mean、count。这个没有捷径,多练几次就会发现规律。而matplotlib是画图库,配合pandas使用,能快速生成折线图、柱状图、散点图。基础用法就两行:plt.plot(x, y)然后plt.show()。如果你在Jupyter Notebook里跑,记得加上%matplotlib inline,否则图像可能不显示。
这里还要提一句,学数据分析不要只盯着库的函数,更重要的是思路。拿到一份数据,先看数据的类型、缺失值、分布情况,再考虑用什么图表展示、用什么指标衡量,最后才写代码。很多初学者一上来就写几百行数据处理代码,结果方向错了,全部白做。先花时间理解数据本身,动手写代码的速度反而会更快。
4.3 小游戏和趣味代码:保持学习热情的秘密武器
学习Python基础的漫漫长路上,保持热情特别重要。我一直建议初学者用趣味项目来调节节奏。比如热搜里经常出现的"python爱心代码",其实就是用turtle库画一个爱心形状,这种项目能让你感受到代码即时反馈的快乐。还有像"人狗大作战"这类文本小游戏,就是用input、random、循环和条件判断写一个猜拳或者回合制战斗的简单程序,非常适合用来练语法。
python复制import turtle
t = turtle.Turtle()
t.speed(3)
t.begin_fill()
t.color("red")
t.left(45)
t.forward(100)
t.circle(50, 180)
t.right(90)
t.circle(50, 180)
t.forward(100)
t.end_fill()
turtle.done()
这类小项目有一个共同特点:代码量不大,但涉及Python基础的方方面面,包括变量、类型、循环、条件、函数、用户输入输出,甚至异常处理。我认识不少朋友,就是靠每天写这样一个小东西,从零基础撑到了能独立写脚本。写的时候不要复制粘贴,尽量自己打一遍,出错了就自己调试,这个过程学到的东西远比代码本身更有价值。我的经验是,哪怕程序跑通了,也要回头想一想哪里能优化,能不能加个功能,这种"玩着学"的状态,是学习Python基础阶段最理想的状态。
5. 把Python脚本打包成exe:分享程序给别人不再求人
5.1 PyInstaller的基本用法与打包流程
写好的Python脚本,在自己电脑上跑得好好的,但发给没有Python环境的同事朋友,对方就傻眼了。解决办法是把脚本打包成可执行文件,Windows下就是.exe文件。Python生态里最常用的打包工具是PyInstaller。安装它只需要一条命令:"pip install pyinstaller"。然后在你脚本所在目录执行下面的命令。
bash复制pyinstaller -F your_script.py
-F参数的意思是打包成单个exe文件,方便分发。打包完成后,生成的exe文件会在dist目录下。如果你的脚本有GUI窗口,可以加-w参数让它不弹出黑色控制台窗口;如果想自定义图标,用-i参数指定一个.ico文件。还有个常用参数是--clean,它会在打包前清理缓存,建议在打包异常时先用它试试。
第一次打包的时候,PyInstaller会分析脚本里所有的import依赖,再把Python解释器和这些依赖一起塞进exe里。所以你会发现,哪怕脚本本身只有几行,打包出来的exe也可能有几十兆甚至上百兆,这是正常的,不用大惊小怪。实际发布的时候,我一般建议用UPX对exe做一层压缩,体积能小不少。PyInstaller对UPX的支持只需要把upx.exe放到指定目录,或通过--upx-dir参数指定路径即可。
5.2 打包常见坑:路径、缺失模块与杀毒误报
打包看起来简单,实际用的时候坑不少。第一个坑是路径问题。你的脚本如果用了相对路径,打包成exe后当前工作目录可能不在exe所在目录,程序就会找不到文件。这种情况需要先获取exe所在的目录,再拼接路径。第二个坑是动态导入的模块。PyInstaller做静态分析时,有一些通过importlib、eval等方式加载的模块它发现不了,程序运行到那一步就会报ModuleNotFoundError。解决办法是在代码里显式import这个模块,或者用PyInstaller的--hidden-import参数手动指定。
第三个坑是杀毒软件误报,这也是很多人抱怨的地方。Python打包的exe确实容易被某些杀毒软件拦截,因为它是"非白名单"的未签名程序。这个属于工具特性,没有彻底消除的办法,但可以尽量用官方原版Python环境打包,不要用一些来路不明的整合版,能降低一些误报概率。发布给别人之前,建议用自己的电脑和另一台电脑都试跑一遍,至少确认在常见环境里能正常打开。
打包是一个比较靠后的环节,我建议Python基础还不牢的朋友先不用急着研究打包,等你的脚本真的需要给别人用的时候,再回来查这部分内容。过早纠结打包细节,容易分散学习语法和逻辑的注意力。但有了这个方向,你会知道Python这条路很长、很好玩,后面还有很多可以探索的工具。
6. 常见错误与排查技巧:Python基础阶段的避坑实录
6.1 命令行报"python不是内部或外部命令"怎么办
这个问题的出现频率高到离谱,几乎每个初学者都会遇到。原因前面提过,主要是安装时没有勾选"Add Python to PATH",或者环境变量配置不正确。排查思路是按顺序检查:先重新打开命令行窗口,确认不是环境变量没刷新的问题;然后右键我的电脑→属性→高级系统设置→环境变量,在Path路径里确认有没有Python安装目录和Scripts目录;如果路径不存在,手动添加,或者干脆重装Python,这次记得勾选Add Python to PATH。要是你机器上装了多个Python,还要注意优先级,where python可以列出所有被找到的Python路径,按Path顺序排列,排最前面的会被优先使用。
6.2 提示"No module named xxx"时,99%的情况是依赖没装好
运行Python脚本,最常见的报错之一是"ModuleNotFoundError: No module named 'requests'"。这个报错的意思很明确:Python在当前环境里找不到你import的模块。一般解法是安装对应依赖,比如执行"pip install requests"。但要注意,你pip装的库和你运行脚本用的Python环境,可能是两个完全不同的环境。判断方法还是用where python和where pip,确认两个路径指向同一个环境。如果你在VS Code里运行脚本用的是venv环境,却在全局环境里装包,那当然会报找不到模块。
还有一类情况类似于热搜里出现的那段提示:"要安装缺失的节点,请先在你的Python环境中运行pip install -u --pre comfyui-m"。这是第三方工具在提示你手动安装缺失依赖。遇到这种提示,我的建议是:先阅读提示信息,看它到底要装什么包;然后在对应的Python环境中执行安装命令,注意先用activate激活正确的虚拟环境;安装完成后重启运行环境。不要直接复制命令就装,先确认这个包是否真的是你需要的,以及安装来源是否可信,安全永远第一。
6.3 IDE环境配置的核心要点:VS Code与PyCharm
很多初学者喜欢用IDE写Python,VS Code和PyCharm是两大主流。这两个IDE都很好用,但它们默认使用的Python解释器不一定是你的虚拟环境,这是很多人困惑的根源。VS Code里需要按Ctrl+Shift+P打开命令面板,输入"Python: Select Interpreter",选择你项目venv里的python.exe。PyCharm则是在File→Settings→Project→Python Interpreter里配置解释器路径。配置完成之后,你运行代码时IDE就会自动用你选中的环境来执行,依赖和全局环境就彻底分开了。
还有一个容易踩的坑是,VS Code右下角选了某个解释器,但终端里激活的是另一个环境,导致在终端里手动运行脚本和点击IDE运行按钮时行为不一致。我的建议是:统一管理,要么都用IDE运行按钮,要么都在终端里运行,尽量不要混着来。另外,记得把IDE的自动保存打开,防止代码没保存就运行,导致改的代码没生效的情况。看起来是小事,实际排查时很容易绕进去。
最后再说一点个人体会。学Python基础,最忌讳的就是只看不练,或者一味追求把语法背得滚瓜烂熟才开始动手。语法书翻完一遍,什么都记不住,反而是在解决一个个实际问题的过程中,语法和工具才真正长在你脑子里。我见过很多零基础的朋友,起初连print都写不对,但靠着每天坚持写点小代码、改点小报错,两三个月后就能独立完成一些自动化工具了。Python的上手曲线在编程语言里算很友好的,但"友好"不代表"不用学就会",它依然需要你亲手敲键盘去验证。希望这篇内容能帮你把基础阶段最麻烦的环境和依赖搞定,让你把精力花在真正重要的逻辑和思路上。后续如果你在做项目的过程中遇到其他问题,欢迎再交流,我尽量把自己踩过的坑写成经验分享出来。
