如何使用 pip 更新 Python 标准库包?
How to update Python Standard Library packages with pip?
我正在为我的 Python 项目创建一个 requirements.txt
文件。当有人通过 pip
安装我的项目时;我希望 pip
也下载 Tkinter
和 time
Python 模块,它们都是 Python 标准库中的模块。
我使用命令 pip freeze
列出所有当前安装的 Python 包,但是当我向下滚动到 T 部分时,我可以在列表中找不到 Tkinter
或 time
。然后我尝试使用命令 pip install Tkinter
通过 pip
安装 Tkinter,但出现以下错误:
Could not find a version that satisfies the requirement Tkinter (from versions: )
No matching distribution found for Tkinter
我也对 time
做了同样的事情并得到了同样的错误。 (我是 运行 Python 3.6 和 Windows 10。)
是否有可能让 pip
在 pip
安装我的包时安装这些模块,或者我只需要相信因为用户已经安装了 Python 他们会还安装了 Tkinter
和 time
?
欢迎并感谢所有帮助!
Python的标准库被称为标准库,因为它是标准 共 Python。也就是说,如果没有安装标准库,python环境根本就不是python。
标准库与每个 Python 版本一起作为此版本的一部分进行测试和发布(不是作为添加或扩展)。
所以,是的,如果用户安装了 Python,您可以期望这些库存在。只是根据定义。
关于内置库的升级:不,你不能这样做。因为它们是 python 设置的一部分,而不是应用程序环境的一部分。 Python 与这些库中的特定代码紧密相关。所有 python 应用程序和库都希望这些库具有相同的行为,即使它们存在错误。
除此之外,您不能安装与 python 的内置函数同名的 module/package,因为它会在导入时产生歧义,并且可以 confuse/break 所有其他依赖它的库(或者更糟的是,如果你将它安装到系统中,系统应用程序 python)。
但是,在某些情况下,您可以找到某些库的 backports。通常,它们从 py3 反向移植到 py2。当然改名了。
例如,您可以查看 concurrent.features
库,它是 py3.2+ 中的一个方便的内置函数,但在 py2.7 中不存在。
UPD: 不过,正如@JulienPalard 在评论中暗示的那样,某些 OS 发行版可以拆分此标准库以简化二进制依赖项:例如,在 Debian 上, Tkinter 将作为 python3-tk.
单独安装
确实,从二进制 OS 打包的角度来看,这是有道理的:如果没有,则不值得安装 python 库的 UI 部分UI 根本不想保存磁盘 space。
但是,您仍然无法通过pip
安装它。因为这个包在 PyPI 上没有单独打包和提供。此标准库分离由选定的 OS 分布进行,并且仅通过该 OS 分布解决。
pip
从 pypi 安装包,它不暴露标准库,标准库被捆绑到 Python.
所以理论上你应该信任你的用户环境,如果他们有 Python,他们应该有整个标准库。
但一些发行版由于某些原因将 Python 拆分为几个包(最小的 Debian 已经依赖于 Python,但他们不想 Python 拉 tk 拉libx11 来拉动生命、宇宙和一切。
所以在实践中会有一些包,你可以相信分发包,比如 time
会一直在这里。有些包可能不在这里,比如 tkinter
,在这种情况下,您可能想用 try
包围 import tkinter
以错误一个很好的 "Looks like your distribution does not provide tk by default, please install it.".
请放心,您不必用 try 语句包围每个导入,以防某些分发拆分 stdlib,只需 tkinter
.
我正在为我的 Python 项目创建一个 requirements.txt
文件。当有人通过 pip
安装我的项目时;我希望 pip
也下载 Tkinter
和 time
Python 模块,它们都是 Python 标准库中的模块。
我使用命令 pip freeze
列出所有当前安装的 Python 包,但是当我向下滚动到 T 部分时,我可以在列表中找不到 Tkinter
或 time
。然后我尝试使用命令 pip install Tkinter
通过 pip
安装 Tkinter,但出现以下错误:
Could not find a version that satisfies the requirement Tkinter (from versions: )
No matching distribution found for Tkinter
我也对 time
做了同样的事情并得到了同样的错误。 (我是 运行 Python 3.6 和 Windows 10。)
是否有可能让 pip
在 pip
安装我的包时安装这些模块,或者我只需要相信因为用户已经安装了 Python 他们会还安装了 Tkinter
和 time
?
欢迎并感谢所有帮助!
Python的标准库被称为标准库,因为它是标准 共 Python。也就是说,如果没有安装标准库,python环境根本就不是python。
标准库与每个 Python 版本一起作为此版本的一部分进行测试和发布(不是作为添加或扩展)。
所以,是的,如果用户安装了 Python,您可以期望这些库存在。只是根据定义。
关于内置库的升级:不,你不能这样做。因为它们是 python 设置的一部分,而不是应用程序环境的一部分。 Python 与这些库中的特定代码紧密相关。所有 python 应用程序和库都希望这些库具有相同的行为,即使它们存在错误。
除此之外,您不能安装与 python 的内置函数同名的 module/package,因为它会在导入时产生歧义,并且可以 confuse/break 所有其他依赖它的库(或者更糟的是,如果你将它安装到系统中,系统应用程序 python)。
但是,在某些情况下,您可以找到某些库的 backports。通常,它们从 py3 反向移植到 py2。当然改名了。
例如,您可以查看 concurrent.features
库,它是 py3.2+ 中的一个方便的内置函数,但在 py2.7 中不存在。
UPD: 不过,正如@JulienPalard 在评论中暗示的那样,某些 OS 发行版可以拆分此标准库以简化二进制依赖项:例如,在 Debian 上, Tkinter 将作为 python3-tk.
单独安装确实,从二进制 OS 打包的角度来看,这是有道理的:如果没有,则不值得安装 python 库的 UI 部分UI 根本不想保存磁盘 space。
但是,您仍然无法通过pip
安装它。因为这个包在 PyPI 上没有单独打包和提供。此标准库分离由选定的 OS 分布进行,并且仅通过该 OS 分布解决。
pip
从 pypi 安装包,它不暴露标准库,标准库被捆绑到 Python.
所以理论上你应该信任你的用户环境,如果他们有 Python,他们应该有整个标准库。
但一些发行版由于某些原因将 Python 拆分为几个包(最小的 Debian 已经依赖于 Python,但他们不想 Python 拉 tk 拉libx11 来拉动生命、宇宙和一切。
所以在实践中会有一些包,你可以相信分发包,比如 time
会一直在这里。有些包可能不在这里,比如 tkinter
,在这种情况下,您可能想用 try
包围 import tkinter
以错误一个很好的 "Looks like your distribution does not provide tk by default, please install it.".
请放心,您不必用 try 语句包围每个导入,以防某些分发拆分 stdlib,只需 tkinter
.