搜索
首页后端开发Python教程我对虚拟环境、Docker 和 Shell 脚本的体验

My Experience with Virtual Environments, Docker, and Shell Scripts

本周,我有一个很酷的作业,我和我的同学必须向彼此的开源项目添加功能。然而,当我的同学尝试运行我的项目时,他遇到了一个令人讨厌的依赖问题,导致整个应用程序崩溃。经过一番反复考虑,我们成功地通过使用虚拟环境、Docker 和简单的 shell 脚本的组合来修复它。让我们来分析一下发生了什么以及这些工具如何让您的生活变得更轻松。

1. 虚拟环境

如果您使用 Python,虚拟环境 是必须的。它们基本上创建了一个隔离的空间,您可以在其中为您的项目安装包,而不会弄乱您的全局 Python 设置。这就像拥有自己的 Python 游乐场,您可以在其中安全地添加和删除包。

以下是如何设置的快速概述:


python3 -m venv venv
source venv/bin/activate  # For Windows, use: venv\Scripts\activate


之后,您可以使用 pip 安装所有软件包:


<p>pip install -r requirements.txt</p>




为什么使用虚拟环境?

  • 保持整洁:虚拟环境将项目依赖关系分开,因此不同的项目不会互相干扰。
  • 保持同一页面:您可以创建一个requirements.txt 文件以确保团队中的每个人都使用相同的软件包版本。

当他们达不到要求时

有时,即使在虚拟环境中,事情仍然可能会出错——就像他们为我们所做的那样!依赖关系仍然崩溃,因为它更多的是系统级问题(呃)。这就是 Docker 拯救世界的地方。

2. 码头工人

Docker 创建容器来打包您的应用程序及其所有依赖项,包括系统库。这意味着它将在每台机器上以相同的方式运行。

这是我们的基本 Dockerfile 的样子:


<p># Use a lightweight Python image<br>
FROM python:3.9-slim</p>

<p># Set up a working directory<br>
WORKDIR /usr/src/app</p>

<p># Copy over the application files<br>
COPY . .</p>

<p># Install dependencies<br>
RUN pip install --no-cache-dir -r requirements.txt</p>

<p># Run the application<br>
CMD ["python", "app.py"]</p>




Docker 的优点

  • 一致性:无论您使用什么系统,Docker 都可以确保您的应用程序在任何地方都运行相同。
  • 没什么惊喜:Docker 包含所有系统库和依赖项,因此您不会遇到那些烦人的“缺少库”错误。
  • 易于共享:您可以与其他人共享您的 Docker 设置,他们只需运行一些简单的命令即可开始。

使用 Docker 运行应用程序

使用以下命令构建并运行 Docker 容器:


<p>docker build -t my-python-app .<br>
docker run -p 5000:5000 my-python-app</p>



  1. Shell 脚本

Shell 脚本就像您项目的私人助理。他们为您处理所有无聊的设置工作。我编写了一个简单的脚本 (setup.sh),用于设置虚拟环境、安装依赖项、构建 Docker 映像并运行容器。它看起来是这样的:


<p>#!/bin/bash</p>

<p># Set up virtual environment<br>
python3 -m venv venv<br>
source venv/bin/activate</p>

<p># Install dependencies<br>
pip install -r requirements.txt</p>

<p># Build Docker image<br>
docker build -t my-python-app .</p>

<p># Run Docker container<br>
docker run -p 5000:5000 my-python-app</p>




为什么要费心使用 Shell 脚本?

  • 一个命令即可统治所有:您无需运行一堆命令,只需运行脚本,它就会处理所有事情。
  • 不再犯错误:自动化设置过程意味着您不太可能犯错误。
  • 适用于任何地方:这些脚本可以在 Linux、macOS 甚至 Windows(如果您有 Bash)上使用。

TL;DR:何时使用什么

  • 虚拟环境:非常适合管理 Python 包。当您需要隔离依赖项但不需要系统级库时使用它们。
  • Docker:非常适合当您需要跨不同机器的一致环境时。它包含了您的应用程序运行所需的一切。
  • Shell 脚本:方便自动化整个设置过程,这样您就不会错过任何一步。

设置开发环境可能会让人头疼,尤其是在协作时。虚拟环境是坚实的第一步,但当事情变得棘手时,Docker 就是最佳选择。为了将所有这些结合在一起,shell 脚本可以使一切顺利运行。

希望这可以帮助任何处理类似问题的人! 如果您有任何其他方法来克服此类问题,请在下面的评论中告诉我。我很想听听你的消息。

以上是我对虚拟环境、Docker 和 Shell 脚本的体验的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您可以使用Python中的循环加入列表吗?您可以使用Python中的循环加入列表吗?May 10, 2025 am 12:14 AM

是的,YouCanconCatenatElistsusingAloopInpyThon.1)使用eparateLoopsForeachListToAppendIteMstoaresultList.2)useanestedlooptoiterateOverMultipliplipliplipliplipliplipliplipliplipliplistforamoreConciseApprace.3)

condenate列表python:使用,扩展()等condenate列表python:使用,扩展()等May 10, 2025 am 12:12 AM

ThemostefficientmethodsforconcatenatinglistsinPythonare:1)theextend()methodforin-placemodification,2)itertools.chain()formemoryefficiencywithlargedatasets.Theextend()methodmodifiestheoriginallist,makingitmemory-efficientbutrequirescautionifpreserving

Python循环:示例和最佳实践Python循环:示例和最佳实践May 10, 2025 am 12:05 AM

pythonboopsincludeforandwhileloops,with forloopsidealforequencessand and whileloopsforcondition repetition.bestpracticesinvolve:1)使用listComprehensionsforshensionsforsimpletranspletransformations,2)obseringEnumerateForIndex-valuepairs,3)optingftingftingfortermornemoremoremoremore

Python的执行模型:编译,解释还是两者?Python的执行模型:编译,解释还是两者?May 10, 2025 am 12:04 AM

pythonisbothCompileDIntered。

Python是按线执行的吗?Python是按线执行的吗?May 10, 2025 am 12:03 AM

Python不是严格的逐行执行,而是基于解释器的机制进行优化和条件执行。解释器将代码转换为字节码,由PVM执行,可能会预编译常量表达式或优化循环。理解这些机制有助于优化代码和提高效率。

python中两个列表的串联替代方案是什么?python中两个列表的串联替代方案是什么?May 09, 2025 am 12:16 AM

可以使用多种方法在Python中连接两个列表:1.使用 操作符,简单但在大列表中效率低;2.使用extend方法,效率高但会修改原列表;3.使用 =操作符,兼具效率和可读性;4.使用itertools.chain函数,内存效率高但需额外导入;5.使用列表解析,优雅但可能过于复杂。选择方法应根据代码上下文和需求。

Python:合并两个列表的有效方法Python:合并两个列表的有效方法May 09, 2025 am 12:15 AM

有多种方法可以合并Python列表:1.使用 操作符,简单但对大列表不内存高效;2.使用extend方法,内存高效但会修改原列表;3.使用itertools.chain,适用于大数据集;4.使用*操作符,一行代码合并小到中型列表;5.使用numpy.concatenate,适用于大数据集和性能要求高的场景;6.使用append方法,适用于小列表但效率低。选择方法时需考虑列表大小和应用场景。

编译的与解释的语言:优点和缺点编译的与解释的语言:优点和缺点May 09, 2025 am 12:06 AM

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境