2008系统怎么做网站网站设计风格说明
2008系统怎么做网站,网站设计风格说明,马来西亚的网站后缀,黄金网站1. 为什么你需要Pyenv-virtualenv#xff1f;一个真实的故事
如果你刚开始学Python#xff0c;或者只是偶尔写个小脚本#xff0c;可能觉得虚拟环境这东西有点“多余”。我刚开始也是这么想的#xff0c;心想#xff1a;“我电脑上就装一个Python#xff0c;所有项目都用…1. 为什么你需要Pyenv-virtualenv一个真实的故事如果你刚开始学Python或者只是偶尔写个小脚本可能觉得虚拟环境这东西有点“多余”。我刚开始也是这么想的心想“我电脑上就装一个Python所有项目都用它多省事”直到有一次我手头有两个项目同时进行。项目A是一个老旧的Web应用依赖的是Django 2.2和Python 3.6。项目B是一个新的数据分析工具需要用到最新的Pandas 2.0而它只支持Python 3.8以上。这下麻烦大了我总不能为了一个项目把整个系统的Python版本和所有库都升级或降级一遍吧那绝对会引发一场“依赖地狱”让另一个项目彻底跑不起来。这就是Pyenv-virtualenv出场的最佳时机。简单来说它就像给你的每一个Python项目准备了一个独立的、专属的“工作间”。在这个工作间里你可以安装任意版本的Python解释器以及任意版本、任意组合的第三方库比如Django、Numpy、Pandas这些。这个工作间和你的电脑主系统、以及其他项目的工作间是完全隔离的互不干扰。项目A用它的Python 3.6和Django 2.2项目B用它的Python 3.10和Pandas 2.0它们可以和平共存在同一台电脑上你只需要在不同的“工作间”之间切换一下就行。你可能听说过virtualenv或者Python自带的venv它们也能创建虚拟环境。那pyenv-virtualenv强在哪里呢它的核心优势在于和pyenv的无缝结合。pyenv是专门管理多个Python版本的工具而pyenv-virtualenv作为它的插件让你在创建虚拟环境时可以直接指定使用pyenv安装好的任意一个Python版本。这就好比你不仅能为每个项目准备独立的工作间还能为每个工作间自由选择不同型号的“核心工具”Python解释器。这种“版本管理环境隔离”的二合一能力对于需要处理多种技术栈的开发者来说简直是救命稻草。无论是Web开发、数据分析、机器学习还是自动化脚本只要你不想让项目之间的依赖打架想保持开发环境的干净和可复现pyenv-virtualenv就是你工具箱里的必备品。2. 手把手搭建你的环境管理工坊在开始创建虚拟环境之前我们得先把“工坊”本身搭建好。这里主要就是安装pyenv和它的插件pyenv-virtualenv。虽然原始文章提到安装很简单但根据我的经验不同操作系统还是有些细节需要注意特别是对于新手跳过这些细节很容易踩坑。对于macOS用户我强烈推荐使用Homebrew来安装这是最省心的方法。打开你的终端Terminal输入以下命令即可一键安装brew update brew install pyenv brew install pyenv-virtualenv安装完成后还需要把pyenv添加到你的Shell配置文件中这样每次打开终端它才能生效。如果你用的是默认的bash编辑~/.bash_profile文件如果用的是zshmacOS Catalina及以后版本的默认Shell则编辑~/.zshrc文件。在文件末尾添加这几行export PYENV_ROOT$HOME/.pyenv export PATH$PYENV_ROOT/bin:$PATH eval $(pyenv init --path) eval $(pyenv virtualenv-init -)添加保存后记得执行source ~/.zshrc或~/.bash_profile让配置立刻生效。最后这个eval $(pyenv virtualenv-init -)命令至关重要它开启了虚拟环境的自动激活功能后面我们会体会到它的便利。对于Linux用户比如Ubuntu过程会稍微多几步因为需要先安装一些编译依赖。你可以用apt-get先安装这些必要的包sudo apt-get update sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev然后我们通常使用pyenv官方推荐的安装器来安装通过curl命令下载并运行安装脚本curl https://pyenv.run | bash这个脚本会自动安装pyenv以及几个常用插件包括pyenv-virtualenv。安装完成后同样需要把上面那几行配置添加到你的~/.bashrc文件末尾并执行source ~/.bashrc。安装好之后我们可以验证一下。在终端里输入pyenv versions。如果你刚安装可能只看到一个带星号*的system这代表你系统自带的Python。接下来我们就可以用pyenv install -l查看所有可以安装的Python版本然后选择一个安装比如pyenv install 3.10.12。安装需要一点时间完成后再运行pyenv versions你就能看到3.10.12也出现在列表里了。至此你的“工坊”基础建设就完成了已经具备了管理多版本Python和创建虚拟环境的能力。3. 从零创建一个专属虚拟环境不只是命令有了前面的准备现在我们来真正创建一个虚拟环境。原始文章给的命令很直接但我想带你走一遍更贴近实际项目的完整流程并解释每个步骤背后的“为什么”。假设我现在要启动一个新的机器学习项目项目代号叫“ML-Project”。我决定使用Python 3.9.7因为这个版本在稳定性和对新库的支持上比较平衡。首先我打开终端导航到我打算存放项目的目录比如~/Projects。然后我运行创建环境的命令pyenv virtualenv 3.9.7 ml-project-env让我拆解一下这个命令pyenv virtualenv是核心命令3.9.7是我通过pyenv事先安装好的Python版本号ml-project-env是我给这个虚拟环境起的名字。我习惯在环境名里带上-env后缀这样在列表里一眼就能看出它是环境而不是Python版本。执行命令后你会看到一些输出显示正在创建虚拟环境。这个过程实际上做了几件事它首先在pyenv的版本目录里找到了Python 3.9.7的解释器然后以它为蓝本复制了一份独立的“副本”到~/.pyenv/versions/目录下目录名就是ml-project-env。这个副本包含了独立的Python解释器、pip工具以及一个空的site-packages目录未来安装的第三方库都会放在这里。它和系统环境、以及其他虚拟环境在文件层面是完全分开的。创建成功后我们怎么使用它呢原始文章提到了pyenv local命令这是最常用、也最推荐的方式。进入你的项目目录或者创建一个新的~/Projects/ML-Project然后运行cd ~/Projects/ML-Project pyenv local ml-project-env这个命令的魔法在于它会在当前目录ML-Project下创建一个名为.python-version的隐藏文件文件内容就是ml-project-env。由于我们之前配置了eval $(pyenv virtualenv-init -)你的Shell会监控这个文件。一旦你cd进入这个目录Shell会自动激活ml-project-env环境当你cd离开时又会自动退出。你会立刻注意到终端提示符前面出现了(ml-project-env)这就是激活状态的标志。此时运行python -V和pip -V显示的都是这个虚拟环境下的路径和版本了。注意如果你在某个目录下使用了pyenv local 3.9.7指定Python版本又使用了pyenv local ml-project-env指定虚拟环境后者会覆盖前者。因为.python-version文件里只保存一个名称。虚拟环境本身已经绑定了Python版本所以直接指定环境名是更常见的做法。4. 虚拟环境内的包管理打造纯净的项目依赖虚拟环境激活后我们终于来到了最核心的环节安装和管理项目所需的第三方库。这是体现环境隔离价值的关键一步。让我用一个更实际的例子来演示。首先我们确认一下环境的纯净度。激活ml-project-env环境后运行pip list。你会看到一个非常简短的列表通常只有pip、setuptools和wheel这几个基础包。这与系统全局环境里可能安装的几十上百个包形成了鲜明对比。我们就是从这样一张白纸开始。现在假设我的机器学习项目需要numpy、pandas、scikit-learn和jupyter。在以前我可能会直接pip install numpy pandas scikit-learn jupyter。但作为一个有经验的开发者我强烈建议你从一开始就养成使用依赖文件的习惯。我们先安装这些包pip install numpy pandas scikit-learn jupyter安装完成后我们可以用pip freeze命令查看当前环境下所有已安装包及其精确版本。pip freeze的输出格式非常适合保存为依赖清单。我们将它输出到一个文件中pip freeze requirements.txt现在查看一下requirements.txt文件内容大概是这样的numpy1.24.3 pandas2.0.3 scikit-learn1.3.0 jupyter1.0.0 ...这个文件就是你这个项目环境的“配方”。它的重要性再怎么强调都不为过。当你把代码分享给同事或者半年后需要在另一台电脑上重新搭建环境时你只需要拷贝这个requirements.txt文件在新的地方创建虚拟环境并运行pip install -r requirements.txt就能一键复现出完全一致的依赖环境彻底避免了“在我机器上能跑”的经典问题。在团队协作中这个文件应该被纳入版本控制比如Git。关于包管理还有几个实用技巧。第一是使用国内镜像源来加速下载这对于安装大型包如torch、tensorflow时体验提升巨大。你可以临时使用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package或者在用户目录下创建~/.pip/pip.conf文件进行永久配置。第二是升级与卸载。要升级某个包使用pip install --upgrade package_name。要卸载则用pip uninstall package_name。所有操作都只影响当前虚拟环境你可以放心尝试不用担心搞乱系统。5. 高效管理你的所有虚拟环境随着项目增多你可能会创建很多个虚拟环境。时间一长自己都可能记不清有哪些环境哪个环境对应哪个项目。pyenv-virtualenv提供了一些非常方便的管理命令来应对这种情况。最常用的就是查看所有环境pyenv virtualenvs这个命令会列出所有通过pyenv virtualenv创建的环境。输出结果清晰明了例如3.9.7/envs/ml-project-env (created from /home/user/.pyenv/versions/3.9.7) * ml-project-env (created from /home/user/.pyenv/versions/3.9.7) django-3.2-env (created from /home/user/.pyenv/versions/3.8.5)带星号*的ml-project-env表示当前激活的环境。从显示信息你也能看出每个环境是基于哪个Python版本创建的。有时候环境名起得不够直观你可以通过这个列表快速回忆起来。另一个常见需求是重命名环境。遗憾的是pyenv-virtualenv没有直接的rename命令。但有一个可靠的手动方法先克隆一个新环境再删除旧环境。假设我想把old-env改名为new-env# 1. 克隆旧环境到新名字需要指定基础Python版本 pyenv virtualenv old-env的Python版本 new-env # 例如pyenv virtualenv 3.9.7 new-env # 2. 如果旧环境里有安装的包需要手动迁移 pip freeze --path ~/.pyenv/versions/old-env /tmp/requirements.txt pyenv activate new-env pip install -r /tmp/requirements.txt pyenv deactivate # 3. 删除旧环境 pyenv uninstall old-env虽然步骤多了点但能保证安全地完成重命名。对于环境的删除原始文章已经提到了pyenv uninstall env-name这个命令很安全会有交互式确认提示防止误操作。删除后该环境对应的所有文件包括安装的包都会被清理干净不会留下垃圾。6. 与IDE和自动化脚本集成提升开发流体验虚拟环境在终端里用得很爽但我们的开发工作不可能全在终端里完成。我们还需要在像PyCharm、VSCode这样的集成开发环境IDE里或者在自动化部署脚本中使用它们。这里有些小技巧。在VSCode中使用VSCode对pyenv-virtualenv的支持非常好。打开你的项目文件夹后按下CtrlShiftP或CmdShiftP打开命令面板输入“Python: Select Interpreter”并选择。VSCode会自动扫描出所有可用的Python解释器其中就包括pyenv管理的版本和虚拟环境。它们通常的路径模式是~/.pyenv/versions/env-name/bin/python。选择你的虚拟环境后VSCode的终端也会自动在该环境下启动左下角状态栏也会显示当前环境的名称一切都能无缝衔接。在PyCharm中使用PyCharm的设置稍微多一点但也很直观。打开File - Settings - Project: 你的项目 - Python Interpreter。点击右上角的齿轮图标选择Add...。在弹出的添加解释器窗口中选择左侧的System Interpreter或Virtualenv Environment。然后在Interpreter路径那里点击右侧的...按钮手动导航到你的虚拟环境目录下的python可执行文件路径通常是~/.pyenv/versions/env-name/bin/python。选中后PyCharm会识别出该环境以及已安装的所有包之后项目的运行和调试就都会在这个隔离环境中进行了。在自动化脚本中激活环境你可能会写一些Shell脚本来自动化测试或部署。在脚本中你不能依赖pyenv local的自动激活因为那依赖于Shell的配置。这时你需要手动在脚本中激活环境。有两种方法。第一种是使用pyenv activate但记得在脚本结尾deactivate#!/bin/bash # 激活虚拟环境 eval $(pyenv init -) pyenv activate ml-project-env # 在这里运行你的Python代码或命令 python my_script.py # 停用虚拟环境 pyenv deactivate第二种更简洁直接就是不激活环境而是直接调用虚拟环境解释器的绝对路径来运行脚本~/.pyenv/versions/ml-project-env/bin/python my_script.py这种方法特别适合在Cron任务或CI/CD流水线中使用因为它不改变Shell的状态更加干净可靠。7. 避坑指南与最佳实践我踩过的那些坑用了这么多年我也积累了一些经验和教训这里分享给你希望能帮你少走弯路。第一个坑环境泛滥。刚开始觉得虚拟环境好用每个小实验、每个demo都建一个新环境。结果几个月后pyenv virtualenvs列出来二三十个根本记不清哪个是哪个。我的建议是按项目创建环境而不是按实验。一个长期维护的项目通常一个主环境就够了。如果项目内有差异很大的子模块比如一个Web服务和一个独立的数据分析脚本可以考虑按子模块创建环境但要在项目文档里写清楚。第二个坑依赖文件不维护。这是我早期犯过的严重错误。项目开发中不断pip install新包但忘了更新requirements.txt。等到要部署时发现requirements.txt里的版本和实际运行的环境对不上导致部署失败。现在的我会使用pip freeze requirements.txt来定期更新依赖文件。更专业的做法是使用pipreqs这样的工具它只扫描项目实际import的包来生成依赖文件比pip freeze更精准。或者使用Poetry、Pipenv这类更现代的依赖管理工具它们能同时管理虚拟环境和依赖并生成pyproject.toml和Pipfile.lock锁定性更强。第三个坑空间占用。虚拟环境会复制一份Python解释器每个环境大概占用50-100MB空间。虽然现在硬盘空间大但环境多了也占地方。对于确定不再使用的环境及时用pyenv uninstall清理掉。另外pyenv安装的每个Python版本本身也占空间定期检查pyenv versions卸载掉那些已经完全不被任何环境或项目使用的Python版本。最佳实践总结一下命名规范环境名最好包含项目名和Python主版本号例如myproject-py39-env一目了然。版本锁定在requirements.txt中尽量使用来锁定主版本和次版本如Django3.2.19避免自动升级导致不兼容。可以在开发环境使用~兼容版本来获取小版本的安全更新。文档化在项目的README.md中明确说明所需的Python版本和虚拟环境名称以及如何安装依赖pip install -r requirements.txt。慎用全局安装除非是像black代码格式化、flake8代码检查这类开发工具否则尽量不要在系统全局Python中安装任何项目库。把所有项目相关的依赖都约束在虚拟环境内。说到底pyenv-virtualenv是一套让你掌控自己开发环境的工具。花一点时间熟悉它养成隔离环境的习惯未来在应对复杂项目、协作和部署时你会感谢现在这个决定。刚开始可能会觉得多了一两步操作有点麻烦但一旦成为肌肉记忆它带来的整洁和安心感是无价的。