mas*_*mas 29 pacman python apt package-management pip
Python 包经常托管在许多发行版的存储库中。阅读本教程后,特别是标题为“您真的想这样做吗”的部分后,我避免使用 pip 并更喜欢使用系统存储库,仅在需要安装不在存储库中的软件包时才使用 pip。
但是,因为这是一种不一致的安装方法,所以只使用pip会更好吗?对于在两个地方都可用的软件包,在系统自己的存储库上使用 pip 有什么好处/批评者?
我包含的链接状态
始终使用标准 Debian / NeuroDebian 软件包的优势在于,这些软件包都经过仔细测试以确保彼此兼容。Debian 软件包记录了与其他库的依赖关系,因此您将始终获得所需的库作为安装的一部分。
我用拱。除了 apt 之外,其他包管理系统也是这种情况吗?
Ste*_*itt 27
我发现使用pip
在您的系统上安装 Python 模块的最大缺点,无论是作为系统模块还是作为用户模块,是您的发行版的包管理系统不会知道它们。这意味着它们不会用于需要它们的任何其他软件包,并且您将来可能想要安装它们(或者可能会在升级后开始使用这些模块之一);然后你最终会pip
得到模块的 - 和分发管理版本,这可能会导致问题(我最近遇到了另一个例子)。所以你的问题最终成为一个全有或全无的命题:如果你只使用pip
对于 Python 模块,您不能再将发行版的包管理器用于任何想要使用 Python 模块的东西...
您链接到的页面中给出的一般建议非常好:尽量使用您的发行版的软件包,仅pip
用于未打包的模块,并且当您这样做时,请在您的用户设置中而不是在系统中这样做-宽的。尽可能使用虚拟环境,尤其是模块开发。尤其是在 Arch 上,你不应该遇到由旧模块引起的问题;即使在可能存在问题的发行版上,虚拟环境也很容易处理。
始终值得考虑的是,发行版的库和模块包主要是为了在发行版中使用其他包而打包的;使用这些库和模块进行开发是一个很好的副作用,但这不是主要用例。
das*_*s-g 11
pip
(+ virtualenv) 用于您的项目(您开发的)使用的东西(库、框架、也许是开发工具)如果您正在用 Python 开发软件,您将希望pip
用于项目的所有依赖项,无论它们是运行时依赖项、构建时依赖项还是自动化测试和自动合规性检查所需的东西(linter、样式检查器、静态类型检查器) ...)
有几个原因:
requirements.txt
(如果您的项目是应用程序)或setup.py
(如果您的项目是库或框架)文件中跟踪项目的所有依赖项。这可以与源代码一起检入修订控制(例如 Git),以便您始终知道哪个版本的代码依赖于您的依赖项的哪个版本。如果您觉得需要分离直接和间接依赖项(或区分依赖项的可接受版本范围和使用的实际版本,参见“版本固定”),请查看 pip-tools 和/或 pipenv。这也将允许您区分构建和测试依赖项。(构建和运行时依赖之间的区别大概可以用 编码setup.py
)
对于您用作普通应用程序并且恰好是用 Python 编写的东西,更喜欢您的操作系统的包管理器。它将确保它保持合理的最新状态并与包管理器安装的其他东西兼容。大多数 Linux 发行版还会断言它们不分发任何恶意软件。
如果您的发行版的默认包存储库中没有您需要的东西,您可以查看其他包存储库(例如基于 deb 的发行版的启动板)或pip
无论如何使用。如果是后者,请用于--user
安装到用户的家中而不是系统范围内,这样您就不太可能破坏 Python 安装。(对于您暂时或很少需要的东西,您甚至可以使用 virtualenv。)
小智 10
使用包管理器的另一个原因是将自动应用更新,这对安全性至关重要。想想如果 Equifax 使用的 beans 包是通过 yum-cron-security 自动更新的,那么黑客可能就不会发生。
在我的个人开发箱上我使用 Pip,在生产中我使用包。
小智 7
如果我们谈论安装 Python 包以在您编写的代码中使用,请使用 pip。
对于您正在处理的每个项目,创建一个虚拟环境,然后仅使用 pip 安装该项目所需的东西。这样,您以一致的方式安装您使用的所有库,并且它们被包含在内并且不会干扰您通过包管理器安装的任何内容。
如果您打算发布任何 python 代码,通常,您将添加一个setup.py
或requirements.txt
到您的项目,这将允许 pip 自动获取它的所有依赖项。允许您轻松地为该项目创建或重新创建虚拟环境。
归档时间: |
|
查看次数: |
5304 次 |
最近记录: |