news 2026/9/8 17:32:33

Python零基础入门:环境配置、虚拟环境与第一个小项目实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python零基础入门:环境配置、虚拟环境与第一个小项目实战

1. 为什么我会把“装环境”和“写代码”这两件事放在同一篇里记

如果你真的打算从零开始学Python,多半会和我当初一样,到处搜“python安装教程”“python入门”“python基础语法”,然后被一堆结果砸晕——问题是,收藏了十几个教程,却连一个能跑起来的脚本都没写出来。

我自己的经验是,越是问自己怎么从零开始,越容易忽略一件事:环境不稳定,后面的学习热情会被一点一点磨掉。代码还没写几行,先被安装报错、找不到模块、版本不一致这类问题劝退了。所以这个系列的第二篇,我不打算直接堆语法,而是把从零开始阶段最容易卡住的“环境准备、编辑器选择、第一遍基础语法练习、第一个小项目”完整记录一遍。

我给自己定的最终学习目标是做一个“能定时跑起来的数据处理小工具”,不需要界面多好看,只要每天自动读取一份文件、完成分类汇总、把结果写到新表里就行。为什么先定这种目标?因为零基础学Python最怕“漫无目的”,今天看点列表、明天看点爬虫、后天又去看装饰器,到头来什么都不熟。反而是围绕一个真实需求往回倒推:要用到文件读写就去查open(),要用到循环和字典就去练for和dict——每一步都有明确目的,学完就能感觉到“这个语法真的在解决我的问题”。

这一篇的内容,对我这种没有任何编程背景、纯粹靠业余时间自学的人会更友好一点。如果你已经能熟练写脚本了,可以直接跳到后面某个小节,看看有没有踩过的坑能共鸣。如果你是零基础或者刚起步不久,建议按顺序跟着走一遍,因为我们踩到的坑大概率是同一批。

2. “把Python装上且能跑”这件事,踩坑过程比想象中曲折

很多人觉得安装Python不就是下载个安装包双击下一步吗,能有什么技术含量?我一开始也这么想,结果花了差不多一个晚上才把所有版本、路径、命令的问题理顺。

2.1 Windows下最容易忽略的“Add Python to PATH”选项

从官网下载安装包时,你会看到安装界面最底下有一个“Add python.exe to PATH”的复选框,默认是不勾选的。这里需要注意:一定要手动勾上。

这个选项的作用是让操作系统在全局知道“python”这个命令指向哪里。如果不勾选,后面你在命令行里输入python --version,系统只会提示“不是内部或外部命令”。很多帖子说“装完Python打不开,显示不是内部命令”,八成就是漏了这一步。

如果你已经装完才发现没勾,不用卸载重装。处理方式有两种:一是重新运行安装包,选择Modify,把这一项补上;二是手动去“系统属性 → 环境变量 → Path”里添加Python安装目录和Scripts目录,比如C:\Users\你的用户名\AppData\Local\Programs\Python\Python312\和下面的Scripts文件夹。第二个方法顺便能帮你理解环境变量到底在干嘛:它就像一张通讯录,系统执行命令时按列表逐个目录去找,找到就运行。

2.2 安装完必须要做的两个验证命令

安装完成别急着写代码,先打开命令行(Win+R,输入cmd回车),依次执行:

python --version pip --version

python --version能正常显示Python 3.x.x,说明主程序没问题;pip --version能正常显示pip和它的路径,说明包管理工具也是通的。这一步花不了十秒钟,但能直接排除后面大半的“ModuleNotFoundError”和“无法将python识别为cmd命令”之类的问题。

有一个情况很常见:命令行里输入pip提示找不到,但输入python -m pip却能用。原因可能是pip的Scripts目录没被加进PATH。这时候不用折腾环境变量,直接养成用python -m pip的习惯就行,比如:

python -m pip install --upgrade pip

python -m pip的含义是“用当前这个Python解释器来执行pip模块”,它天然知道该去哪个环境安装,比单独敲pip更不容易装错地方。这个习惯建议从一开始就练起来,后面多环境时会省心很多。

2.3 一台电脑想装多个Python版本,怎么共存

我后来因为要跑一些老项目,电脑上不止装了一个Python版本,这又引出新问题:命令行里输入python到底用的是哪个?尤其Windows下如果有多个版本,它们的安装目录都在PATH里,顺序靠前的会被优先启用。

Windows下有一个官方工具叫Python Launcher,安装时选上它,之后可以用py命令来切换版本:

py -3.10 --version py -3.12 --version py -0

如果想给当前项目指定版本,就创建虚拟环境时指定基础解释器,这个下一节会细说。至于要不要卸载老版本,我的建议是:如果只是自己学习,装最新稳定版就够了,不必搞多版本,少给自己添乱。等真有项目需要时再补也不迟。

2.4 Linux下安装Python,我后来更推荐“包管理器优先”

我的主力机器是Ubuntu,但第一次在Linux下装Python时也栽了。很多教程一上来就叫你源码编译,./configure、make、make install一套走下来,编译过程还容易因为缺依赖报错,比如少装zlib、libffi、ssl相关开发包,最后装出来发现很多模块用不了。

后来我学乖了:优先用包管理器安装系统自带的Python版本,比如:

sudo apt update sudo apt install python3 python3-pip python3-venv

Ubuntu自带的是Python 3.12左右,对绝大多数学习场景完全够用。这里特别提醒一点:Linux系统自带的python3是用来支撑系统工具的,不要随便把它删掉或者替换默认版本。想用新版本,就通过虚拟环境或单独路径管理,而不是直接改系统的软链接,否则可能把系统搞出问题。

验证方式也一样,在终端输入python3 --version和pip3 --version。之所以是python3而不是python,是因为很多Linux发行版里python命令默认指向Python 2或者根本不存在。

3. VS Code和PyCharm的选择,我用实际试错得到的结论

编辑器这个问题,看起来是小事,实际会影响你前两周的学习体验。我刚开始纠结于“到底用哪个”,网上也没少搜“vscode配置python”“pycharm配置python环境”。后来干脆两个都装了一遍,每个用两三天,最后留下了自己的固定组合。

3.1 没想清楚之前,VS Code更适合“快速跑起来”

VS Code吸引我的点是轻、启动快、界面干净。但“轻”的另一面是很多东西要自己配置,如果没有耐心把插件和解释器配好,新手很容易卡在“代码写好了但不知道怎么运行”。

我按下面这套流程配置后,用起来就很顺了:

  1. 打开VS Code,在扩展市场搜索“Python”,安装微软官方那个Python扩展(作者是Microsoft)。
  2. 按Ctrl+Shift+P打开命令面板,输入“Python: Select Interpreter”,选择你刚安装的Python解释器。
  3. 打开一个新文件,保存为后缀是.py的文件,编辑器会自动启用语法高亮。
  4. 在代码里右键,选择“在终端中运行Python文件”,或者直接点右上角的三角形运行按钮。

VS Code最常被吐槽的坑是:明明在系统里能执行python,编辑器里却提示找不到解释器。这通常是因为VS Code终端没有重新加载PATH。解决办法很简单:完全关闭VS Code再重新打开,或者重启终端,让新的环境变量生效。

3.2 PyCharm适合学项目管理时的“环境焦虑”比较少

在部分场景,PyCharm其实更能减少心智负担。它会把虚拟环境、解释器选择、依赖安装这些事情都集成在图形界面里,新建项目时直接选虚拟环境类型,不需要记一堆命令。虽然启动慢、占内存,但对初学者来说,少一个“要理解的内容”就是少一个劝退因素。

Community Edition社区版免费,不涉及Web开发时足够用了。我主要会在需要debugger看变量值、或者处理多个文件组合的项目时切到PyCharm。

如果选PyCharm,新建项目时建议直接选择Virtualenv,并指定一个基础解释器。它默认会为每个项目创建独立的venv环境,之后你用pip装的包只存在于当前项目内,不会“污染”全局,也不容易跟其他项目互相干扰。正式一点的说法叫“隔离”,我用大白话解释就是:每个项目有自己的小仓库,A项目装了什么不会影响B项目,B项目也不需要的东西不会装到A里。

3.3 虚拟环境算是每个Python学习者的分水岭概念

大部分人刚开始学Python时都不明白为什么“明明pip install成功了,还提示ModuleNotFoundError”,最常见的原因就是:包装进了全局环境,但你当前项目用的解释器不是同一个全局环境。这就像你的手机下载了App,却用平板去打开,当然找不到。

所以从项目一开始,我就给自己定了一条规矩:每个项目都建虚拟环境。创建一个项目目录后,在目录下执行:

python -m venv venv

Linux/mac激活环境:

source venv/bin/activate

Windows激活环境:

venv\Scripts\activate

激活后,命令行前面会出现(venv)字样,就代表现在所有pip操作都在这个虚拟环境里了。退出环境的命令是:

deactivate

等哪个环境不需要了,直接删除目录即可。把项目依赖导出成清单也有固定做法:

pip freeze > requirements.txt

别人拿到这个文件后,执行pip install -r requirements.txt就能装回整套依赖。后来等我把一个项目打包给同事用时,靠的就是这个文件。

4. 基础语法阶段,我用的方法和踩到的坑

从安装环境到真正开始学语法,中间其实还有一个“不短”的适应期。热词里经常出现的“python基础语法”“python类型转换”“python定义变量”“python装饰器”,按我的经历不完全是一个学习阶段的产物——变量和类型是起步学的,装饰器通常要等你写了很多重复代码后才真正理解。我把我的进度记录一下。

4.1 变量和类型转换:别用“存东西的盒子”那套思路

很多教程会说变量是装数据的盒子,这在大脑里形成的图景是“往盒子里放东西”,放了一个数字再放一个字符串,就好像盒子标签换了、内容也换了。我以前的理解就是这样的,导致后来在判断内存归属时出了很多问题。

Python更准确的理解是:变量名只是给对象贴的一个“名字标签”,对象在内存里都有自己的身份(id)。赋值只是把名字和某个对象绑定起来。比如:

a = 1 a = "hello"

这个过程不是把盒子从数字换成字符串,而是让名字a先从1身边撕下来,再贴到"hello"这个对象上。而1这个数字对象从头到尾都没消失,只是暂时没有名字引用它而已。

类型转换这个点,我一开始觉得特别无趣,后来被现实教育了——你从文件或网页里取回来的数据基本都是字符串形式的数字,比如"128",你不能直接拿它做数值运算,必须转换:

num_str = "128" num = int(num_str)

反过来,要把数字拼进一段文字里,也需要转成字符串:

price = 12.5 print("当前价格是" + str(price))

这里有个新手必踩的坑:int("12.5")会直接报ValueError,因为int()函数只认整数形式的字符串,不认小数点。小数点要转成数值,得用float("12.5")。

4.2 条件和循环:缩进是我花了两天才适应的“门槛”

学过其他编程语言的人第一次看到Python代码,大概率会不习惯,因为它不是用花括号{}来划分代码块,而是用缩进。缩进错了,程序直接报IndentationError,而且这个错误在编辑器里肉眼很难看。所以如果你的代码报缩进错误,建议把编辑器里“显示空格/制表符”这个选项打开,一眼就能看到哪里多了一个空格。

for循环和if判断是绕不开的高频语法:

scores = [70, 85, 92, 58] for score in scores: if score >= 60: print(f"及格:{score}") else: print(f"不及格:{score}")

遍历一个列表时,如果既想要序号又想要元素,最自然的写法是用enumerate给每个元素编号:

for i, score in enumerate(scores, start=1): print(i, score)

我刚开始时写过类似for i in range(len(scores))的代码,其实也能用,只是麻烦一点还容易多写一次“取元素”的操作。后来多看官方文档才发现,enumerate就是Python专门为“同时需要索引和值”这个场景设计的。

4.3 函数和装饰器,为什么我把它们隔了半周才学

函数我很早就开始用了。建议你从第一天写代码起就把“重复出现的逻辑”拆成函数,而不是复制粘贴。例如要把一串价格都加上税,可以定义一个函数:

def add_tax(price, tax_rate=0.06): return price * (1 + tax_rate)

这个函数里,price是必填参数,tax_rate有默认值0.06,调用时直接add_tax(100)即可。如果发现很多函数都要在开头执行一段日志记录,或者都要做权限校验,这时候自然会产生“把函数包装一层”的需求,Python中的装饰器就是干这个的:

def log_call(func): def wrapper(*args, **kwargs): print("调用前,记录日志") result = func(*args, **kwargs) print("调用后,收尾") return result return wrapper @log_call def say_hello(name): print("你好," + name)

装饰器的直观理解是:它不修改原来函数的代码,而是在函数外面包了一层“皮”,调用函数时先执行“皮”上的逻辑,再进函数体。我建议零基础不要头两天就啃装饰器,等至少写过几十个函数、体会到重复逻辑的麻烦后才去学,效果会好很多。

4.4 报错不是“你不行”,它是编译器的耐心翻译

开始学语法时,我每次看到红色的报错信息就紧张,潜意识里觉得“自己写错了”。后来才发现Python的报错已经是比较友好的了:它会明确告诉你错在哪个文件第几行、是什么类型的错误、大概是什么原因。比如:

File "test.py", line 3, in <module> ans = x / 0 ~~^~~ ZeroDivisionError: division by zero

这行报错就足够说明:test.py第3行,把x除以0了,除数为零。你只需要回到第3行把除数改掉。零基础阶段如果能学会“读报错”,后面自己排查问题的能力会比周围人快很多。

我自己的习惯是:遇到报错先看最后一行,确认错误类型;再往上翻看具体行号;能解决就先解决,别一开始就去复制粘贴整段报错来问。等真解决不了,再带着“我已经试了xxx方法但报错依然存在”去搜索,效率更高。

5. 首次跑通一个小项目后,我对“自学”这件事的理解变了

我印象最深的是某天深夜,我照着语法写了三十多行代码,终于把一个命令行下的迷你记账本跑通了。它没有一个网页界面,也没有任何美观设计,只是在黑乎乎的终端里能够实现“收入/支出/余额”的记录和统计,但我盯着终端里那几行输出看了很久——原来一个自己能掌控的程序是这样的。

5.1 第一个版本不要想着做“完整系统”

绝大多数初学者会犯一个毛病:项目还没开始,脑子已经构思出一个标准产品,比如“要能登录注册、要能数据可视化、要能数据库存储”。结果写了两天连目录都建不好,最后放弃。我的建议是,第一次为了理解流程,不要做这么大型的项目。从“单文件的命令行工具”开始,比如记账本、待办清单,它不长,却能把变量、列表、循环、字典和输入输出全串起来。

下面是我第二周写的记账本核心逻辑大致思路。用一个列表存每一笔记录,每条记录又是一个字典,包含类型、金额、备注:

records = [] while True: action = input("你要做什么?(记账/统计/退出)") if action == "退出": break if action == "记账": typ = input("收入还是支出?") amount = float(input("金额:")) note = input("备注:") records.append({"type": typ, "amount": amount, "note": note}) elif action == "统计": total_in = sum(item["amount"] for item in records if item["type"] == "收入") total_out = sum(item["amount"] for item in records if item["type"] == "支出") print(f"总收入:{total_in},总支出:{total_out},结余:{total_in - total_out}")

这段逻辑不复杂,但写完你会发现,input()读取的是字符串、需要float()转换、列表推导式怎么用、直条件里字符串怎么比较——全是基础语法的综合运用。当我能够看着运行结果,再倒回去修改哪个变量名更清晰的时候,就感觉自己不是“在学语法”,而是真的在利用语法组织程序了。

后来又花了点时间,在它基础上加了日期字段和一个简单的CSV文件存档功能。有了文件读写,程序的“记忆”就不再依赖每次打开的会话了——关闭再重开,之前的账面和数据还能读取。学会到此处时,你就会明白为什么Python中有open()、有with语句、有encoding这些。

5.2 入门阶段顺便掌握“拿到网页数据”的基本功

自然语言学习和短期热词里,“python爬虫”永远是高频点。我的理解是,初学者对爬虫的兴趣往往源自“能自动从网页上拿到数据”的直观成就,但其实你不用等后期再接触知识,开始做一个非常简单的requests请求就能感受到网络获取的全过程。

我最早写的一个练习是请求某个天气预报接口,把返回的JSON字符串解析出来,拿到“今天气温”,把它打印出来:

import requests resp = requests.get("https://example.com/api/weather") data = resp.json() print(data["today"]["temperature"])

这里需要提醒一点:不是任何网站的数据都能随便爬。所谓“爬虫”的本质是用程序自动发起请求并解析信息,但要注意,它必须遵守目标网站的robots协议和公开API接口文档。我自己练习时仅限于请求公共接口和明确开放的网站,绝对不写任何绕过验证机制的逻辑。这点意识最好从一开始就养成:不合法不合规的开发手法,永远不应该出现在你的学习记录里,对个人信息使用也应慎重。如果目标接口没有权限或连接被拒,就别强行处理了;把requests、resp.json()这些API用法练好就够了。

5.3 把py文件转成exe,是特别及时的“正反馈”

学了三个星期左右,我已经把初步的练习成果交给一个不懂技术的好友使用体验,并且也用PyInstaller打包成exe给他传送不依赖Python环境。当时看到那句“构建成功”,激动程度不低于第一次跑通Hello World。

打包exe的操作很简单:

pip install pyinstaller pyinstaller -F your_script.py

-F参数是生成一个单独的exe文件,方便分发;如果你运行时会调用图片或其他资源,则可能需要对应的--add-data参数。打包完成后,exe在dist目录下。但我更建议你把这件事当作“给自己信心”的手段,而不是框架。过早热衷于研究打包各种参数其实在“词频热度”上很有出现,但可能掩盖了基本功要吃透这一事实;你是比较清醒的,知道环境基本配置完成后应该回头再理解一遍循环和类型,这部分做的正确值得记录。

6. 教训与心得,写给同样在慢慢入门路上卡住的人

如果想给这段经历写个“结语”,我不想把它写成“一起加油”之类的空话,那样没有太大意义。真正有价值的部分,是我把自己遇到的几个问题复盘后留下的“检查清单”:

第一,代码运行环境和写代码本身一样重要,甚至环境问题更烦人。版本选错、PATH没配好、解释器选错、模块装错环境……这些都不是代码逻辑错误,却会让人误以为是自己学不会。排查时不必郁闷,而是照着“python --version、pip --version、编辑器里选择解释器”这串步骤来一遍,问题大多能解决。

第二,“先抄代码”没问题,但不能只抄。遇到不理解的code,我试过最有效的方法是把每一行翻译成中文注释写下来,再删掉注释重新默写一遍。默写不出来的地方,就是你还没有内化的地方,回头再去翻资料,针对性会强很多。

第三,定时复习和时间管理才是持续性的关键。我当时给自己定了“周日发布”的节奏,等于时刻提醒自己——本周的记录不是等待空档来完成,每一篇都是学习进度的复盘。实践下来很管用,将公开输出固化成了一种制度,避免了好几个星期的拖延。你若也想边学边记录,从博客或笔记形式开始都可以,但定时去写下更让人能真正坚持。

第四,如果说零基础最需要的一点品质,大概不是天赋,而是“每次被报错气到不行之后,仍然愿意打开编辑器再跑一次”。这个听起来像鸡汤,但在我当时学习笔记里写下的那句话其实是:真正崩溃过一次的人,才能真正调试出对自己有效的经验。我在电脑上那会儿,尝试vscode配置python、验证环境变量、研究虚拟环境与类型转换,一段段地用最简单的话拼出一个当时的编程世界。现在回看那些记录,它们比任何课程笔记都更有纪念价值——每个参数,都对应着自己某一次眼盲、某一次修正,也最后一次,在某个周日完成记录时,感觉到了实实在在的进步。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 17:31:47

微信场景下的多模态Embedding训练:数据、损失与部署全攻略

1. 写在前面&#xff1a;为什么要在“微信”语境下训练多模态 Embedding看到这个标题&#xff0c;你可能第一反应是&#xff1a;微信还能自己训模型&#xff1f;其实这里的“微信”有两层意思&#xff1a;一是微信生态里的业务场景&#xff08;小程序、公众号、视频号、扫一扫、…

作者头像 李华
网站建设 2026/9/8 17:31:42

接口测试全攻略:从工具实战到自动化框架与平台演进

1. 接口测试到底测什么&#xff1a;先厘清基础概念 聊接口测试之前&#xff0c;得先统一一下认知。很多人一提到接口测试&#xff0c;第一反应就是"用Postman发个请求&#xff0c;看返回是不是200"。这其实只摸到了皮毛。接口测试的核心&#xff0c;是直接对服务端提…

作者头像 李华
网站建设 2026/9/8 17:29:26

Atmosphere 19.0.1 固件适配指南:从机型判断到排障的完整流程

Atmosphere 19.0.1 固件适配指南&#xff1a;从机型判断到排障的完整流程 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere Atmosphere 是运行…

作者头像 李华
网站建设 2026/9/8 17:28:08

书霸AI|www.shubaai.com|微信搜书霸AI写作

https://www.shubaai.com写文献综述最容易踩的坑&#xff0c;并不是“资料不够多”&#xff0c;而是没有建立清晰的研究坐标。第一次接触某个选题时&#xff0c;很多人习惯边搜边写&#xff1a;看到一篇摘一句&#xff0c;换一篇再补一段。最后引用不少&#xff0c;文章却像文献…

作者头像 李华
网站建设 2026/9/8 17:26:47

SSM框架体育器材管理系统毕设:核心流程设计与避坑指南

每年到这个节点&#xff0c;总有不少人抱着同一个标题来找我聊——SSM框架的体育器材管理系统。这个选题几乎是Java后端毕业设计里的“流量担当”&#xff0c;它不炫技&#xff0c;但足够典型&#xff1a;涉及用户登录、角色权限、器材台账、借用归还、库存状态流转&#xff0c…

作者头像 李华
网站建设 2026/9/8 17:26:39

GitHub热榜揭秘:AI Agent与效率工具如何重塑开发者工作流

2. 热度榜单速览&#xff1a;这20个项目到底在卷什么GitHub Trending 这个东西&#xff0c;我基本每天早上都会刷一遍。它不像技术新闻那样有编辑筛选&#xff0c;纯粹靠star增长量说话&#xff0c;所以榜单上的项目往往就代表着“当下开发者最愿意花时间去看、去收藏、去尝试的…

作者头像 李华