删除和/或更新系统的 Python 时虚拟环境的后果

2024-01-11

编辑清楚:这个问题是参考venv https://docs.python.org/3/library/venv.html,这经常与虚拟环境 https://virtualenv.pypa.io.

删除系统的 Python 安装(它是用于在系统上创建虚拟环境的源)会产生什么后果venv?

最终,我想做的是删除 3.7 安装并在发布时安装 3.8,但我不确定虚拟环境与系统环境的联系有多紧密。

提出此问题时可能相关的一些系统详细信息:

  • 操作系统 = 红帽企业 Linux 7
  • 3.7 从 Python.org 的源代码安装,not the rh-Pythonx.x包在 yum 存储库中。
  • Python 3.7 安装到默认位置,/usr/local/bin/python3.7
  • /usr/local/bin/python3是一个链接/usr/local/bin/python3.7

鉴于上述细节,我的印象是 Python 3.8 将安装到/usr/local/bin/python3.8 and python3然后将指向该版本。

虚拟环境是否有足够的资源来成为自己稳定的 3.7 环境?或者它会崩溃,试图引用不再存在的系统安装吗?

tl;dr: 从不再存在/被更新版本替换的 Python 源创建的所有虚拟环境会发生什么情况?


坏消息:你正在使用venv, and venv虚拟环境并不是完全独立的。即使创建时使用--copies,它复制的只是python可执行文件本身,而不是标准库,甚至不是(如果您的安装创建了共享libpython而不是静态的)libpython;它依赖于系统副本。如果虚拟环境所基于的 Python 安装消失,虚拟环境将会崩溃。How它的破坏会根据它的创建方式而有所不同。例如,如果您使用以下命令创建它:

python3 -mvenv path/to/venv

when python3表示Python 3.7,然后替换python3使用 Python 3.8,那么您可以使用以下命令修复新版本的虚拟环境:

python3 -mvenv --upgrade path/to/venv

但您安装的第三方软件包将(有效地)消失(它们将位于path/to/venv/lib/python3.7,但 Python 3.8 只会查找path/to/venv/lib/python3.8),因此您必须重新安装它们。

如果您使用以下命令创建虚拟环境:

python3.7 -mvenv path/to/venv

然后它就完全损坏了(至少按照记录),the --upgrade switch https://docs.python.org/3/library/venv.html#creating-virtual-environments仅当 Python 就地升级时才被记录为可用于升级;因为新的Python不会被命名python3.7,无法就地升级。也就是说,--upgrade由于前面提到的每个次要版本,实际上只有在升级微版本(从 3.7.1 到 3.7.2 等)时才能正常工作lib/pythonX.Y目录,因此无论哪种方式,您最好从头开始创建一个新的虚拟环境。

需要明确的是,第三方virtualenv package https://virtualenv.pypa.io/en/latest/userguide/没有这个限制当且仅当系统Python安装静态链接libpython。奇怪的是,虽然--always-copy标志将使它复制主二进制文件和标准库模块,它不会导致libpython本身(解释器核心)被复制,所以如果主二进制文件依赖于系统副本libpython.so,然后删除系统副本会破坏虚拟环境。If你确实用过--always-copy and your python静态链接的可执行文件libpython.a (ldd /path/to/python3应该显示没有libpython依赖性),那么是的,virtualenv变得更加重量级(在 3.6 的本地测试中,通过适当的开关强制复制,新创建的venv环境约为 11 MB,而virtualenv环境约为 48 MB;可悲的是,我的python动态链接libpython.so,所以它仍然无法工作)虚拟环境应该在删除系统安装的 Python 副本后仍然存在。

无论如何,最好保留 Python 3.7 安装,直接升级到 3.8,而不删除 3.7(您真的没有几十 MB 的磁盘空间吗?)。就算你换了python3随着新的 3.8 安装,python3.7, libpython3.7m.so.1.0等等,3.7标准库的其余部分将继续存在以供虚拟环境依赖;最坏的情况下,您可能需要手动更改虚拟环境中的符号链接以指向/path/to/python3.7而不是/path/to/python3继续使用旧版本(包括所有安装的第三方软件包)。

尝试保持旧虚拟环境正常运行的另一种方法是备份该虚拟环境的安装状态,删除它,安装新的 Python,创建一个新的虚拟环境,然后使用备份的状态重新安装所有包在升级后的虚拟环境中。一个例子可能是:

$ source ~/path/to/venv/bin/activate
$ pip freeze > installed_libs.txt
$ deactivate
$ rm -rf ~/path/to/venv
$ ... install new Python/remove old Python ...
$ python3 -mvenv ~/path/to/venv
$ pip install -r installed_libs.txt  # Optionally add --upgrade to install latest, not fixed versions
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除和/或更新系统的 Python 时虚拟环境的后果 的相关文章

  • 用于查找列表/集合中唯一元素的代码

    根据上面阴影部分的面积应该代表 A XOR B XOR C XOR A AND B AND C 如何将其翻译成Python代码 代码必须与上述表达式中提供的集合操作密切相关 至少这是首选 该代码必须足够通用 能够处理 3 个以上的列表 UP
  • 如何在 kubernetes 上使多个 pod 相互通信

    我是 Kubernetes 新手 我正在尝试通过 microk8s 将应用程序部署到 Kubernetes 该应用程序包含Python Flask后端 Angular前端 Redis和MySQL数据库 我将映像部署在多个 Pod 中 状态显
  • 查找 python 数据框中每行的最高值

    我想找到每行中的最高值并返回 python 中该值的列标题 例如 我想找到每行的前两个 df A B C D 5 9 8 2 4 1 2 3 我希望我的输出看起来像这样 df B C A D 您可以使用字典理解来生成largest n数据帧
  • 使用 Python 的 optparse 模块时如何遵守 PEP 257 文档字符串?

    根据PEP 257 http www python org dev peps pep 0257 multi line docstrings命令行脚本的文档字符串应该是它的使用消息 脚本的文档字符串 a 独立程序 应该可用 作为其 使用 消息
  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • __getitem__、__setitem__ 如何处理切片?

    我正在运行 Python 2 7 10 我需要拦截列表中的更改 我所说的 更改 是指在浅层意义上修改列表的任何内容 如果列表由相同顺序的相同对象组成 则列表不会更改 无论这些对象的状态如何 否则 它会更改 我不需要找出来how列表已经改变
  • 覆盖现有的 django-admin 命令

    除了编写自定义 django admin 命令之外 这是有详细记录的 https docs djangoproject com en 1 9 howto custom management commands 我希望能够覆盖现有命令 例如ma
  • 来自数据框 groupby 的条形图

    import pandas as pd import numpy as np import matplotlib pyplot as plt df pd read csv arrests csv df df replace np nan 0
  • 为什么我在将数据上传到数据库时不断看到“正在重置断开的连接”?

    我正在通过 REST API 将数亿个项目从 Heroku 上的云服务器上传到 AWS EC2 中的数据库 我正在使用 Python 并且经常在日志中看到以下 INFO 日志消息 requests packages urllib3 conn
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • Python代码执行时自动打开浏览器

    我正在 Python Flask 中实现 GUI Flask 的设计方式是 必须 手动 打开本地主机以及端口号 有没有一种方法可以使其自动化 以便在运行代码时自动打开浏览器 本地主机 我尝试使用 webbrowser 包 但它在会话终止后打
  • 将查询参数添加到 URL

    我正在尝试自动从网站下载数据 我需要将动态参数传递到每天更改的站点 html 的结构是表格而不是表单 如何传递参数并从 url 获取结果 这是我尝试过的 它需要在 python 2 7 中 import urllib url https d
  • 如何将 pip 指向 Mercurial 分支?

    我正在尝试通过 pip 将我的应用程序安装到 virtualenv 进行测试 安装时效果很好default or tip像这样 pip install e hg https email protected cdn cgi l email p
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 在Python中将罗马数字转换为整数

    根据 user2486 所说 这是我当前的代码 def romanMap map M 1000 CM 900 D 500 CD 400 C 100 XC 90 L 50 XL 40 X 10 IX 9 V 5 V 4 I 1 return
  • 在Python中打开网站框架或图像

    所以我对 python 相当熟练 并且经常使用 urllib2 和 Cookies 来实现网站自动化 我刚刚偶然发现了 webbrowser 模块 它可以在默认浏览器中打开一个网址 我想知道是否可以从该 url 中仅选择一个对象并打开它 具
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • 使用 Python 进行 Google 搜索网页抓取 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近为了工作中的一些项目 学习了很多python 目前我需要使用谷歌搜索结果进行一些网络抓取 我发现几

随机推荐

  • OSX NSUserDefaults 不工作

    这段代码在我的应用程序中总是给我 否 它确实可以在我复制它的任何其他项目中工作 所以我的 standardUserDefaults 一定搞砸了 但我绝对不知道这是如何发生的以及如何解决它 NSUserDefaults defaults NS
  • org.openqa.selenium.WebDriverException:尚未定义命令或响应编解码器。无法继续

    我正在使用 appium 来自动化移动应用程序 但是当我尝试在应用程序上执行某些操作 即单击登录按钮 时 在模拟器或移动设备上启动应用程序后 会发生上述异常 有人知道它出了什么问题吗 gt 错误截图 https i stack imgur
  • 当一个方法被多次调用时,@RequestParam变量返回一组逗号分隔的值

    我刚刚注意到 当连续多次调用控制器方法时 用于检查 POST 参数 例如用户名或 id 的 RequestParam 变量的行为相当奇怪 它不返回当前参数值 例如 Jason Michael John 而是返回之前调用该方法所用的所有参数值
  • 禁用时省略 editText 的内容

    我有一个布局 其中 EditText 由用户填充 然后它被禁用以充当标准 TextView 问题是 椭圆形永远不适用于此 EditText 我希望它在文本太大而无法完全显示时在文本末尾显示 但我找不到任何方法让它起作用 而且我不知道为什么它
  • Cassandra 和非结构化数据

    我对 NoSQL 还比较陌生 但我已经对关系数据库进行了相当多的尝试 我们正在评估 Cassandra 在数据模型可能需要相当积极地发展的环境中的使用情况 我看到它在多个地方写到 Cassandra 可以存储 结构化 半结构化和非结构化 数
  • 两个黑莓模拟器之间的短信

    如何编写程序以使用 BlackBerry JDE 在两个 BlackBerry 模拟器之间发送和接收 SMS 您需要使用以下参数从命令行启动模拟器 sms source port uint sms destination port uint
  • iOS:UIBezierPath 和 CAShapeLayer fillRule

    我都用过UIBezierPath and CAShapeLayer前 但几乎每次都会结合用内部颜色填充路径中包含的对象 但我想这次填充包含的对象外部的颜色UIBezierPath 我刚刚编写并运行了以下简单的代码 试图让自己熟悉fillRu
  • 哈希值和加盐值

    我正在开发一个小型网络应用程序 可以在内部对用户进行身份验证 一旦用户通过身份验证 我的 Web 应用程序就会将一些信息 例如用户 ID 和人员姓名 传递给第三方 Web 应用程序 第三方开发人员建议我们对这些值进行哈希和加盐 原谅我的无知
  • 仅当窗口尚不存在时 JavaScript window.open

    我有一个应用程序 单击链接后会打开一个新窗口 这会生成一个包含 Java 小程序的页面 我遇到的问题是 单击同一链接会重新加载页面 从而重置 Java 应用程序 有什么办法可以捕获这个吗 可以接受的两种解决方案是 允许从单击处理程序打开多个
  • 为什么运行时会出现错误(使用“clojure.contrib.repl-utils”)?

    我发现我可以通过阅读 Programming Clojure 一书第 20 页 使用 Chris Houser 的 repl utils 库 clojure contrib repl utils source 或 show 来深入了解 Ja
  • gem yank 失败“版本不存在”

    我试图在 ruby gems com 上替换我的 gem 的错误版本 但猛拉失败 你可以看到https rubygems org gems v2gpti https rubygems org gems v2gpti该 gem 在 v0 2
  • 从共享库使用时,imbue/facet 会被忽略,具体取决于 Android 下的动态加载顺序

    我正在 Android 上部署一个 C 应用程序 它使用boost date time 它有很多库 一些在编译时链接 共享库 其他一些是插件 在运行时动态加载dlopen 在某些库中 设置boost posix time time face
  • 将 docker-compose 转换为 Helm Chart?

    我有一个 docker compose 文件 其中包含我正在使用的安全工具的 2 个图像 我的挑战是将其转换为由deployment yaml和service yaml组成的helm图表 docker compose 看起来像这样 vers
  • 只读静态字段初始化的线程安全

    如果创建一个像这样的只读静态成员 public sealed class MyClass public readonly static MyClass Instance new MyClass 我们知道 如果某个线程第一次访问 MyClas
  • 当字节可用时,.Net SerialPort 需要 0.5 秒以上的时间来读取字节

    我正在使用 C 中的 Net SerialPort 类从端口读取字节 收到 DataReceived 事件后 我检查串行端口以查看是否有字节可供读取 然而 即使字节可用 端口也可能需要半秒以上的时间来读取单个字节 代码大致如下 while
  • 裸字符串的数组等效项

    我可以毫无问题地做到这一点 const char foo This is a bare string 我想要的是能够对数组做同样的事情 const int bar 1 2 3 显然该代码无法编译 但是是否有某种与裸字符串等效的数组 你不能这
  • 全局变量和静态全局变量[重复]

    这个问题在这里已经有答案了 在 C 中 全局变量 const 和全局静态变量 const 之间有什么区别吗 在cpp文件或头文件中声明 static const int x1 someFunction 5 const int x2 some
  • iPhone UITableView。如何打开音乐应用程序中的单字母字母列表?

    在 iPhone 音乐应用程序中 选择 艺术家 歌曲 或 专辑 会在 UI 右侧呈现一个带有单个字母垂直列表的 tableView 可实现快速滚动 如何在我的应用程序中启用此功能 干杯 道格 提供您自己的索引字符 NSArray secti
  • 没有可用的隐式视图

    当尝试批量加载列表时DBObject s via insert http api mongodb org scala casbah 2 1 2 scaladoc com mongodb casbah MongoCollection html
  • 删除和/或更新系统的 Python 时虚拟环境的后果

    编辑清楚 这个问题是参考venv https docs python org 3 library venv html 这经常与虚拟环境 https virtualenv pypa io 删除系统的 Python 安装 它是用于在系统上创建虚