亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要 python 模塊的最低版本

需要 python 模塊的最低版本

開滿天機 2023-09-26 16:59:46
我需要確保導入的包之一至少是 v1.2.6。我在這里看到的所有問題都檢查正在運行的Python版本。我想檢查該模塊的版本。我當前的解決方案很混亂。必須有一個Python式的解決方案來解決這個問題。import pypfoptver = pypfopt.__version__major, minor, iter = ver.split('.')major = int(major)minor = int(minor)iter  = int(iter)if major < 1:    logger.error("major version less than 1")if minor < 2:    logger.error("minor version less than 2")if iter < 6:    logger.error("iter version less than 6")可能重復:雖然關于 SO, 1 , 2 , 3也有類似的問題,但這些問題正在解決如何從 獲取和打印結果module.__version__,我已經在這樣做了。我的問題是,是否有一種干凈的、Pythonic 的方法來檢查版本號與最小版本號。例如:if pypfopt.__version__ < 1.2.6:    logger.error("Version is too low. Update")但__version__返回一個字符串,并且由于有兩個小數(1.2.6),因此無法將其轉換為浮點數,然后進行比較。目前,我正在將每個單獨的數字轉換為 int,然后進行比較。如此混亂的解決方案不可能是正確的方法。我使用 10 行來比較兩個數字。
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

您可以使用packaging模塊。安裝它pip install packaging然后:


from packaging import version


import pypfopt



ver = pypfopt.__version__


if version.parse(ver) < version.parse('1.2.6'):

    logger.error('Version is too low. Update')


查看完整回答
反對 回復 2023-09-26
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

pkg_resources,與 一起分發setuptools,做您需要的事情并處理package.__version__不存在的情況。


pypfopt==1.2.6以下是您在示例中需要最小版本的方式:


python -c 'import pkg_resources; pkg_resources.require("pypfopt>=1.2.6")'

我沒有安裝這個軟件包,所以我得到:


Traceback (most recent call last):

  File "<string>", line 1, in <module>

  File "python3.8/site-packages/pkg_resources/__init__.py", line 884, in require

    needed = self.resolve(parse_requirements(requirements))

  File "python3.8/site-packages/pkg_resources/__init__.py", line 770, in resolve

    raise DistributionNotFound(req, requirers)

pkg_resources.DistributionNotFound: The 'pypfopt>=1.2.6' distribution was not found

 and is required by the application

警告:我經常使用它,直到現在我遇到了一個問題,即相關包具有正確的版本,但其依賴項不滿足,因此pkg_resources報告失敗。


例如:我已經pytorch_lightning==1.0.5安裝了,但我為其依賴項之一安裝了新版本,但它未列為受支持。我期望以下內容能夠通過,但失敗了:


python -c 'import pkg_resources; pkg_resources.require("pytorch_lightning>=1.0.4")'

和:


Traceback (most recent call last):

  File "<string>", line 1, in <module>

  File "python3.8/site-packages/pkg_resources/__init__.py", line 884, in require

    needed = self.resolve(parse_requirements(requirements))

  File "python3.8/site-packages/pkg_resources/__init__.py", line 775, in resolve

    raise VersionConflict(dist, req).with_context(dependent_req)

pkg_resources.ContextualVersionConflict: 

(torch 1.8.0.dev20201106+cu110 (python3.8/site-packages), 

Requirement.parse('torch<1.8,>=1.3'), {'pytorch-lightning'})

如果您想確保不僅所需的模塊存在并且具有正確的版本,而且其依賴項也正確,那么這是正確的做法。


所以我在這里發出信號,這pkg_resources不僅僅是比較已安裝軟件包的版本號 - 它還檢查其依賴項。這可能會也可能不會滿足您的需求。


這是不檢查依賴關系是否正常的版本。在其中,我們用來pkg_resources獲取包的版本,并將比較委托給packagingSO 的各種答案中所描述的:


import pkg_resources

from packaging import version

pkg = "pytorch_lightning"

min_ver = "1.0.4"

got_ver = pkg_resources.get_distribution("pytorch_lightning").version

if version.parse(got_ver) < version.parse(min_ver):

    raise pkg_resources.VersionConflict(f"{pkg}>={min_ver} is needed, but found {pkg}=={got_ver}")

這次,盡管依賴項不正確(在我的示例中),但版本號足夠高就足夠了,因此腳本可以繼續使用pytorch_lightning(我驗證了它與較新版本的依賴項一起工作得很好)。


查看完整回答
反對 回復 2023-09-26
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號