2017-10-21 120 views
2

我正在为我的Python项目创建一个requirements.txt文件。当有人通过pip安装我的项目;我想要pip也下载Tkintertime Python模块,它们都是Python标准库中的模块。如何用pip更新Python标准库包?

我用命令pip freeze列出所有当前已安装Python包的,但是当我向下滚动到牛逼部分,我不能在列表中找到Tkintertime。然后,我尝试使用命令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)

是否有可能得到pippip正在安装我的包来安装这些模块,还是我只是相信,因为用户已经安装的Python,他们也将有安装了Tkintertime

欢迎所有帮助和赞赏!

回答

3

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上单独打包和单独使用。此标准库分离是由选定的操作系统分发完成的,并仅通过该操作系统分发的方式进行解析。

+2

Debian不会在他们的python3包提供Tkinter的,他们有分开的python3-tk的包装,以避免在最小设置的依赖地狱。 –

+0

@JulienPalard谢谢!我已经添加了这个答案。忘记了python生态系统以外的东西可能会有所不同... –

+0

谢谢! @SergeyVasilyev这是否意味着我只需要希望在安装我的软件包时Debian用户安装了Tkinter? –

4

pippypi安装软件包,该软件包未公开标准库,该标准库已捆绑到Python中。

所以理论上你应该相信你的用户环境,如果他们有Python的,他们应该有整体stadard库。 (一个最小的Debian已经取决于Python,但他们不希望Python拉动lib来拉动生命,宇宙和一切)。

因此,在实践中一些包将在那里,你可以信任的发行商为此,像time将永远在这里。而一些包可能不会在这里,像tkinter,在这种情况下,你可能希望通过一个try包围的import tkinter错误一个不错的“您的分配不默认为传统知识,请安装它。”可以放心的是,如果某些分发版分割了stdlib,只需要tkinter,那么您不必通过try语句来包围每个导入。

+0

感谢您使用'try'语句的想法。我将不得不将其纳入我的代码。 –