2017-10-21 119 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'語句的想法。我將不得不將其納入我的代碼。 –