最近我痛苦地意识到,我根本不知道如何管理我的系统上的 Python 包。
我必须能够知道安装了什么以及在哪些用户 ID 下安装了什么,因为 Python 社区指导说任何东西都不应以 Root 身份安装。。。这给我带来了一个严重的问题!
在这种情况下,我使用的是 Fedora 发行版,主要是但不完全是 Fedora Server(都是某种形式的 Fedora Core),但我确信这个问题也适用于其他发行版。
最终的问题是:系统管理员应该如何正确处理这个问题?
请注意,我并不是在问如何安装 Python 本身,也不是在谈论开发系统,如果开发人员搞砸了他们自己的系统,那么,这只会影响他们,尽管这仍然不是很好。
我关注的是,某些使用 Python 的软件包有自己的子包,这些子包无法通过通常的平台包安装范例获得。其中之一促使我突然发现我面临的风险;Mailman3 就是这样一个包,因为安装它并没有安装所有需要的子包,所以需要一些“pip install”。在与同事讨论时,他承认搞砸了我负责管理的一个系统,结果才知道他通过 pip 安装的 Python 包搞砸了它……
...我觉得我可能被迫实施安全措施,这样个人用户就无法安装 Python 包,从而增加我自己的工作量,不仅要这样做,还要为他们安装他们想要的包,以及所有由此带来的麻烦。我希望我只是对 Python 的一些“功能”一无所知!否则,我认为 Python 需要认真重新考虑它是如何工作的,因为它对系统管理员来说肯定非常不友好。
答案1
您的开发人员应该使用Python 虚拟环境对于应用程序。有了这些虚拟环境,应用程序的依赖项将安装在特定环境中,并且不会影响其他环境。
当在虚拟环境中开发和测试应用程序时,会验证所有依赖项是否正确安装。
如果某些包缺少依赖项,那么您需要通知包维护者更新依赖项。
答案2
有人可以负责自动安装所需的应用程序并确保它们正常运行。可能提供预装应用程序的虚拟机或容器。他们是否被视为操作人员或开发人员取决于您的组织。
喜欢使用系统包管理器的操作系统管理员可能会将每个包都打包在 rpm 或 deb 中。将 Mailman 3 的安装统一到其 Python 依赖项。可以使用应用操作系统更新的相同基础结构对包进行签名和交付。但是,需要大量的打包工作,因为事物和它的依赖项。看起来 Fedora 有一个mailman3 包并且他们的基础设施也使用它。
开发人员和其他用户可能会放弃系统包管理器,转而使用特定语言的包管理器,在本例中为 Python pip。可以访问大量包的最新版本,并可以将它们安装在非特权用户的目录中。但是,管理员的控制权较少,用户可能会陷入麻烦。他们可能会陷入麻烦,因为Mailman 3 依赖项有要链接的 C 库、MTA 设置和数据库,以及单独的 Web UI 应用程序。
您在系统软件包和 pip 之间观察到的冲突提示您需要选择一个。要么以与系统 python 兼容的方式打包它,要么将其放入包含要求的虚拟环境中。虽然您可以删除pip 包为了防止用户弄乱东西,pip 可以由一个确定的用户引导。理想情况下,帮助人们安装一组已知可以工作的应用程序。