【问题标题】:Python environment maintenancePython环境维护
【发布时间】:2021-07-21 14:06:30
【问题描述】:

这个问题也有点啰嗦——但真诚地请求帮助!

我一直在努力确保我的 Python 安装是最新的,并且在我使用的所有不同机器和设备(例如树莓派、台式电脑和笔记本电脑)之间尽可能接近相同。

我最近的挫败感源于一个实际示例,其中我有两个相同的 Pi Zero W,带有 BME280 传感器,运行完全相同的 Python 脚本——一个运行完美,另一个抱怨 urllib3——尽管两个 Pi 都使用相同版本的 Python 等,甚至在卸载和重新安装 influxdb 之后(首先开始抱怨 influxdb 客户端不可用 - 然后在卸载和重新安装之后,它发现了一些新的东西,以 urllib3 的形式抱怨......) ,然后卸载并重新安装 urllib3 和请求(但仍然无法正常工作...)

我发现它同样令人沮丧,即使只是在一台 PC 上保留和维护一个版本的 Python 和库 - 特别是如果你将 Mac 投入到看似有自己“专用”Python 安装的混合中 - 尝试安装“专用”不会与“内置”版本混淆的 Python 环境也会导致事情在一段时间后变得如此混乱 - 你不再知道什么在哪里,甚至使用 pip/pip3 开始产生你不期望的结果在您希望看到它们的地方提供库的条款...

是否有一些优雅的解决方案可以在设备等之间轻松转移?也许像在某个地方安装一个“主”python 安装,我可以克隆或“打包”,然后随脚本一起移动,所以我知道它可以在我安装它的任何设备上工作,并且无论将来有什么更新都可以继续工作?一个 Docker 容器可以工作 - 但我很确定它对于 Pi Zero 来说太大了......

我知道 venv,但我不确定这是否可以在设备之间“复制和粘贴”。同样,理想情况下,我想在我的 PC 上创建代码,并且能够将 python 文件复制到另一台设备,并且知道它会在任何地方运行相同... rant> :)

【问题讨论】:

  • Docker 绝对是我的第一个想法。你试过了吗?
  • 当你使用 venv/conda 实际使用环境时会发生什么错误?环境被设计为沙盒,至少在很大程度上不依赖于基础安装。
  • 能否请edit 删除咆哮部分并专注于一个问题的问题?真的很难弄清楚你到底在问什么,具体点涵盖了广泛的主题。
  • 打包你的脚本。在setup.py 中放置精确的依赖关系(或者,在未来,pyproject.toml 是旧约定的新兴替代品)。

标签: python updates libraries maintenance


【解决方案1】:

编写一些适用于任何 Python 环境的代码,并将继续执行任何更新是无望的,除了非常琐碎的代码(print ('Hello') 应该给出相同的结果,无论 Python 版本如何,但并不是很有趣)。

AFAIK,在Python Packaging User Guide 的意义上,唯一合理的方法是打包您自己的代码。打包将管理依赖项和 Python 版本,因此如果您可以使用一些 /path/to/python -m pip install 安装它(对于没有 venv 的 Windows,则分别为 py -x -m pip install),那么它应该可以使用用于安装的同一 python。

了解 Python 打包和构建包确实需要一些初步工作,但在新环境中安装应用程序时应该可以省去一些麻烦......而且如果您希望能够拥有各种需要可能不兼容的 Python 应用程序库版本,venv 绝对是解决方案:您构建一个 venv,在其中安装自己的包,并使用正确的版本准确找到您需要的依赖项。

【讨论】:

  • 感谢您的回答 - 是否可以“复制和粘贴”venv?我正在阅读您的包装用户指南...
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 2019-09-22
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多