如何用pip更新Python标准库包?
我正在为我的Python项目创建一个requirements.txt
文件。当有人通过pip
安装我的项目;我想要pip
也下载Tkinter
和time
Python模块,它们都是Python标准库中的模块。如何用pip更新Python标准库包?
我用命令pip freeze
列出所有当前已安装Python包的,但是当我向下滚动到牛逼部分,我不能在列表中找到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的内建模块相同,因为它会在导入时产生歧义,并且可能会混淆/破坏所有依赖于它的库(或更糟糕的是,系统应用程序如果将其安装到系统python中)。
但是,在某些情况下,您可以找到某些库的backports。通常,他们从py3被移植到py2。当然,他们的名字已经改变了。
作为一个例子,你可以看看concurrent.features
库,它是py3.2 +中的一个方便的内建库,但在py2.7中不存在。
UPD:尽管正如@JulienPalard评价暗示,某些OS分布可以拆分此标准库来简化二进制依赖关系:例如,在Debian上,Tkinter将作为python3-tk单独安装。
从二进制操作系统打包的角度来看,这确实很有意义:如果您根本没有用户界面并且想要保存磁盘空间,那么安装用户界面的python库部分是不值得的。
但是,你仍然无法通过pip
安装它。因为这个软件包没有在PyPI上单独打包和单独使用。此标准库分离是由选定的操作系统分发完成的,并仅通过该操作系统分发的方式进行解析。
pip
从pypi安装软件包,该软件包未公开标准库,该标准库已捆绑到Python中。
所以理论上你应该相信你的用户环境,如果他们有Python的,他们应该有整体stadard库。 (一个最小的Debian已经取决于Python,但他们不希望Python拉动lib来拉动生命,宇宙和一切)。
因此,在实践中一些包将在那里,你可以信任的发行商为此,像time
将永远在这里。而一些包可能不会在这里,像tkinter
,在这种情况下,你可能希望通过一个try
包围的import tkinter
错误一个不错的“您的分配不默认为传统知识,请安装它。”可以放心的是,如果某些分发版分割了stdlib,只需要tkinter
,那么您不必通过try语句来包围每个导入。
感谢您使用'try'语句的想法。我将不得不将其纳入我的代码。 –
Debian不会在他们的python3包提供Tkinter的,他们有分开的python3-tk的包装,以避免在最小设置的依赖地狱。 –
@JulienPalard谢谢!我已经添加了这个答案。忘记了python生态系统以外的东西可能会有所不同... –
谢谢! @SergeyVasilyev这是否意味着我只需要希望在安装我的软件包时Debian用户安装了Tkinter? –