python基础总结:4.1、虚拟环境和包

2023-11-04

python基础总结:4.1、虚拟环境和包


1. 概述

Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。

这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。

这个问题的解决方案是创建一个 virtual environment,一个目录树,其中安装有特定Python版本,以及许多其他包。

然后,不同的应用将可以使用不同的虚拟环境。 要解决先前需求相冲突的例子,应用程序 A 可以拥有自己的 安装了 1.0 版本的虚拟环境,而应用程序 B 则拥有安装了 2.0 版本的另一个虚拟环境。 如果应用程序 B 要求将某个库升级到 3.0 版本,也不会影响应用程序 A 的环境。

2. 创建虚拟环境

用于创建和管理虚拟环境的模块称为 venvvenv 通常会安装你可用的最新版本的 Python。如果您的系统上有多个版本的 Python,您可以通过运行 python3 或您想要的任何版本来选择特定的Python版本。

要创建虚拟环境,请确定要放置它的目录,并将 venv 模块作为脚本运行目录路径:

python3 -m venv tutorial-env

如果它不存在,这将创建 tutorial-env 目录,并在其中创建包含Python解释器,标准库和各种支持文件的副本的目录。

创建虚拟环境后,您可以激活它。

在Windows上,运行:

tutorial-env\Scripts\activate.bat

在Unix或MacOS上,运行:

source tutorial-env/bin/activate

(这个脚本是为bash shell编写的。如果你使用 cshfish shell,你应该改用 activate.cshactivate.fish 脚本。)

激活虚拟环境将改变shell的命令提示来显示您正在使用的虚拟环境,以及改变当前环境,使运行python时能使用特定版本的Python安装。例如:

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May  6 2016, 10:59:36)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>

3. 使用pip管理包

你可以使用一个名为 pip 的程序来安装、升级和移除软件包。默认情况下 pip 将从 Python Package Index <https://pypi.org> 安装软件包。你可以在浏览器中访问 Python Package Index 或是使用 pip 受限的搜索功能:

(tutorial-env) $ pip search astronomy
skyfield               - Elegant astronomy for Python
gary                   - Galactic astronomy and gravitational dynamics.
novas                  - The United States Naval Observatory NOVAS astronomy library
astroobs               - Provides astronomy ephemeris to plan telescope observations
PyAstronomy            - A collection of astronomy related tools for Python.
...

pip 有许多子命令:“search”、“install”、“uninstall”、“freeze”等等。(请参阅 安装 Python 模块 指南以了解 pip 的完整文档。)

您可以通过指定包的名称来安装最新版本的包:

(tutorial-env) $ pip install novas
Collecting novas
  Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
  Running setup.py install for novas
Successfully installed novas-3.1.1.3

您还可以通过提供包名称后跟 == 和版本号来安装特定版本的包:

(tutorial-env) $ pip install requests==2.6.0
Collecting requests==2.6.0
  Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0

如果你重新运行这个命令,pip 会注意到已经安装了所请求的版本并且什么都不做。您可以提供不同的版本号来获取该版本,或者您可以运行 pip install --upgrade 将软件包升级到最新版本:

(tutorial-env) $ pip install --upgrade requests
Collecting requests
Installing collected packages: requests
  Found existing installation: requests 2.6.0
    Uninstalling requests-2.6.0:
      Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0

pip uninstall 后跟一个或多个包名称将从虚拟环境中删除包。

pip show 将显示有关特定包的信息:

(tutorial-env) $ pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:

pip list 将显示虚拟环境中安装的所有软件包:

(tutorial-env) $ pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)

pip freeze将生成一个类似的已安装包列表,但输出使用 pip install 期望的格式。一个常见的约定是将此列表放在 requirements.txt 文件中:

(tutorial-env) $ pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0

然后可以将 requirements.txt 提交给版本控制并作为应用程序的一部分提供。然后用户可以使用 install -r 安装所有必需的包:

(tutorial-env) $ pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
  ...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
  ...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
  ...
Installing collected packages: novas, numpy, requests
  Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0

pip 有更多选择。有关 pip 的完整文档,请参阅 安装 Python 模块 指南。当您编写一个包并希望在 Python 包索引中使它可用时,请参考 分发 Python 模块 指南。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python基础总结:4.1、虚拟环境和包 的相关文章

随机推荐

  • [ShaderGraph]12.水晶效果

    边缘发光ShaderGraph节点图 内发光ShaderGraph节点图 透明水晶效果ShaderGraph节点图 效果图 节点解析 边缘光的效果不涉及新节点 自发光的涉及到的新节点是One Minus 透视效果涉及的新节点是View Di
  • 深入了解Python 变量作用域

    更多编程教程请到 菜鸟教程 https www piaodoo com 友情链接 好看站 http www nrso net 高州阳光论坛https www hnthzk com 特点 python的作用域是静态的 在源代码中变量名被赋值的
  • python编写知乎爬虫实践

    爬虫的基本流程 网络爬虫的基本工作流程如下 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL 解析DNS 并且得到主机的ip 并将URL对应的网页下载下来 存储进已下载网页库中 此外 将这
  • 前端-elemen-ui中el-cascader组件(自定义)

    关于饿了么儿 的cascader组件后端返回的数据与组件里的参数不同如何处理 后端返回的数据 element ui中Cascader 级联选择器组件结构为 参数不一样 修改方法
  • pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

    tep是一款测试工具 在pytest测试框架基础上集成了第三方包 提供项目脚手架 帮助以写Python代码方式 快速实现自动化项目落地 在tep项目中 自动化测试用例都是放到tests目录下的 每个 py文件相互独立 没有依赖 1个文件即1
  • 执行shell脚本出现“let:not found”错误以及解决办法

    问题描述 在写一个脚本循环时候 出现 let not found 这是因为在ubuntu默认是指向bin dash解释器的 dash是阉割版的bash 其功能远没有bash强大和丰富 并且dash不支持let和i 等功能 解决办法 打开一个
  • 消息队列MQ-面试题

    目录 1 什么是消息队列 2 为什么要使用消息队列 1 解耦 2 异步处理 3 削峰 3 使用消息队列带来的一些问题 4 JMS两种消息模型 5 消息队列由哪些角色组成 6 常见消息中间件比较 7 如何保证消息队列是高可用的 RocketM
  • vue开发过程中node和sass互相对应的版本

    点击查看官网node sass和node对应的版本 1 点击查看稳定版链接 2 点击查看拓展版链接 1 检查node版本 2 删除node modules 3 保留原始的package json文件 4 安装node sass 5 安装sa
  • 二维码生成+解码

    在线二维码解码器 二维码安全检测工具 如下
  • Apache Struts2漏洞复现之s2-005漏洞复现

    0x01 声明 仅供学习参考使用 请勿用作违法用途 否则后果自负 0x02 简介 Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构 它利用并延伸了Java ServletAPI 鼓励开发者采
  • Kafka零拷贝

    Kafka除了具备消息队列MQ的特性和使用场景外 它还有一个重要用途 就是做存储层 用kafka做存储层 为什么呢 一大堆可以做数据存储的 MySQL MongoDB HDFS 因为kafka数据是持久化磁盘的 还速度快 还可靠 支持分布式
  • 头文件中的ifndef/define/endif的作用

    防止该头文件被重复引用 标识的命名规则一般是头文件名全大写 前后加下划线 并把文件名中的 也变成下划线 如 stdio h define STDIO H 例子 Define CRTIMP ifndef CRTIMP ifdef DLL de
  • jdbc操作Date类型时的比较

    有些oracle数据库查出日期时得到的结果是不一样的 select from table t where t attentionTime to date 2015 09 15 yyyy mm dd 这样的查询语句在一个数据库有时是可以查到有
  • Javascript中函数的形参和函数内局部变量同名的问题

    前言上次牛客网做到这样一个题 非常有意思 陷阱非常多 当时觉得搞明白了 现在再看到 又糊涂了 发现了新的点 看一下 var foo n 1 function foo console log foo n foo n 3 var foo n 2
  • SpringBoot系列 logback-spring日志配置使用记录以及解决依赖包冲突问题

    SpringBoot推荐使用logback spring xml SpringBoot官方推荐使用logback spring xml作为logback框架的自定义日志配置文件 例如 使用logback spring xml而不是logba
  • go 进阶 三方库之 EasJson 与标准库json

    目录 一 Go 标准库 json 二 EasJson 一 Go 标准库 json Go 标准库中提供了内置的 JSON 编码和解码功能 可以用于序列化和反序列化 JSON 数据 import encoding json fmt type P
  • idea点击跳转至.class文件解决方案

    在使用Idea时 点击一些发布的包资源文件时 会跳转到 class文件中而不是正确的源码文件 原因是我们被优先定位到Maven依赖下 我们可以通过设置文件资源来控制跳转 解决方案 进入 class文件后 顶端会有一个显示条 两个选项 Dow
  • 存个档,好不容易解出来的SQL题(取得销售量排名前10的品类里面,每个品类卖的最好的前三个商品及销量(中国式排名))

    题目 取得销售量排名前10的品类里面 每个品类卖的最好的前三个商品及销量 中国式排名 1 获取每个品类内每个商品的销售量排名 SELECT ub item category ub item id COUNT ub item category
  • java Web-servlet技术-servlet基础与doGet()方法doPost()方法辨析

    servlet工作原理 创建一个简单的servlet项目 实现验证用户登录 1 创建一个Dynamic Web Project 取名为myservlet 2 创建一个myservlet的package 在package中创建一个名字为Log
  • python基础总结:4.1、虚拟环境和包

    python基础总结 4 1 虚拟环境和包 文章目录 python基础总结 4 1 虚拟环境和包 1 概述 2 创建虚拟环境 3 使用pip管理包 1 概述 Python应用程序通常会使用不在标准库内的软件包和模块 应用程序有时需要特定版本