【问题标题】:How to update pywin32 automatically?如何自动更新pywin32?
【发布时间】:2018-03-21 04:28:00
【问题描述】:

据我了解,不能使用 pip 安装/升级 pywin32,尽管 pip install -U pypiwin32 是一种解决方法。

pywin32 现在托管在 GitHub 上。我对git 知之甚少,但知道它适用于二进制文件。有没有办法以编程方式升级pywin32 二进制文件?也就是说,假设pywin32 v221 与 Python v.3.6(64 位)一起安装,程序应检查 GitHub 上的最新版本(v223)并下载pywin32-223.win-amd64-py3.6.exe 并安装它。到目前为止,我只能想到一个类似网络抓取的脚本,它将已安装的版本与网络上的最新版本进行比较并采取相应的行动。我想知道是否有一个简单的解决方案。

【问题讨论】:

    标签: python github pip pywin32


    【解决方案1】:

    我可能遗漏了一些重要的东西,否则(几乎)问题中的每个陈述/假设似乎都不正确:

    1. 可以使用 pip 安装/升级[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions
    2. GitHub 用于托管源代码(主要)。那里的资产是 Mark Hammond 的 Win 安装程序(因为 pywin32 托管在 SourceForge - 早在 pip 诞生之前),我想它们是仅为向后兼容而构建
    3. pip 不下载 pywin32 二进制文件,而是从 [PyPI]: Links for pywin32 下载 wheel

    为了演示以上所有内容,我创建了一个VirtualEnv,并在此基础上进行了一系列步骤:

    • pythonpip 可执行文件位置/版本
    • pip 测试(使用 pip 列出 pywin32 版本)- 无输出(未安装 pywin32
    • pywin32 下载和URL显示
    • pywin32 安装(稍后测试升级的旧版本)
    • pip 测试
    • pywin32 测试(使用 pywin32 列出 pywin32 版本)
    • pywin32 升级
    • pip 测试
    • pywin32 测试

    输出

    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>where python pip
    c:\Work\Dev\VEnvs\py36x64_test\Scripts\python.exe
    c:\Work\Dev\VEnvs\py36x64_test\Scripts\pip.exe
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>python -c "import sys;print(sys.version)"
    3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip -V
    pip 9.0.3 from c:\work\dev\venvs\py36x64_test\lib\site-packages (python 3.6)
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>rem pip test
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip list 2>nul | findstr pywin32
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip download -vvv pywin32 2>nul | findstr /i download
      Downloading pywin32-223-cp36-cp36m-win_amd64.whl (9.0MB)
      Downloading from URL https://pypi.python.org/packages/9f/9d/f4b2170e8ff5d825cd4398856fee88f6c70c60bce0aa8411ed17c1e1b21f/pywin32-223-cp36-cp36m-win_amd64.whl#md5=2d211288ee000b6ec5d37436bcbe8a43 (from https://pypi.python.org/simple/pywin32/)
    Successfully downloaded pywin32
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip install https://pypi.python.org/packages/be/25/0e0c568456b77ce144dd2b8799f915b046ffa1cd922771d214e4be05bca2/pywin32-222-cp36-cp36m-win_amd64.whl#md5=94a9a3782081e14973c5ae448957d530 2>nul
    Collecting pywin32==222 from https://pypi.python.org/packages/be/25/0e0c568456b77ce144dd2b8799f915b046ffa1cd922771d214e4be05bca2/pywin32-222-cp36-cp36m-win_amd64.whl#md5=94a9a3782081e14973c5ae448957d530
      Downloading pywin32-222-cp36-cp36m-win_amd64.whl (9.0MB)
        100% |################################| 9.0MB 135kB/s
    Installing collected packages: pywin32
    Successfully installed pywin32-222
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>rem pip test
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip list 2>nul | findstr pywin32
    pywin32 (222)
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>rem pywin32 test
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\\\")[\"FileVersionLS\"] >> 16)"
    222
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip install -U pywin32 2>nul
    Collecting pywin32
      Using cached pywin32-223-cp36-cp36m-win_amd64.whl
    Installing collected packages: pywin32
      Found existing installation: pywin32 222
        Uninstalling pywin32-222:
          Successfully uninstalled pywin32-222
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>rem pip test
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>pip list 2>nul | findstr pywin32
    pywin32 (223)
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>rem pywin32 test
    
    (py36x64_test) e:\Work\Dev\StackOverflow\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\\\")[\"FileVersionLS\"] >> 16)"
    223
    

    【讨论】:

    • 有趣的方法,比我的回答更准确。 +1
    • 谢谢你,@VonC!我记得我使用 pip 安装了 pywin32 但我没有时间测试升级是否也有效。
    • @CristiFati 在我将pip 升级到9.0.3 后,我也可以使用pip install pywin32。我使用的是旧版本,但不能。
    • 我使用的是 9.0.3 (更新了答案)。但我也能够使用 pip 9.0.1 (Python 3.5) 安装 pywin32 - 我没有旧版本。即使您的 pip 已经很老了,它也不能解释它。您是否能够使用旧的 pip 安装其他软件包?或者是不是在您尝试 .whl 时还没有(发布)?
    • @CristiFati 你可能是对的,当我 pip install -U pywin32.whl 并不存在。我怎样才能知道?我忘记了之前更新或升级的时间戳。
    【解决方案2】:

    您可以使用Chocolatey 及其pywin32 package,但它已经过时了。

    因此,one described in this article(对于其他程序,但具有类似想法)这样的脚本解决方案是可能的。另见this gist
    如果你将latest Git for Windows解压到任何你想要的地方,并使用simplified PATH,你将可以访问200多个Linux命令,包括awkhead等。

    【讨论】:

    • 不幸的是,pywin32 恰好是不支持版本的其中之一。也就是说,https://api.github.com/mhammond/pywin32/releases/latest 给出“未找到”。有解决这个问题的想法吗?
    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多