如何自动更新pywin32?
How to update pywin32 automatically?
据我了解,虽然 pip install -U pypiwin32
是一种解决方法,但不能使用 pip 到 install/upgrade pywin32
。
pywin32
现在托管在 GitHub 上。我对 git
知之甚少,但知道它适用于二进制文件。有没有办法以编程方式升级 pywin32
二进制文件?也就是说,假设 pywin32
v221 安装了 Python v.3.6(64 位),程序应检查 GitHub 上的最新 (v223) 并下载 pywin32-223.win-amd64-py3.6.exe
和安装它。到目前为止,我只能想到一个类似于网络抓取的脚本,将安装的版本与网络上的最新版本进行比较,并采取相应的行动。请问有没有简单的解决办法
您可以使用 Chocolatey and its pywin32 package,但它已过时。
因此脚本解决方案为 one described in this article (for other programs, but with a similar idea) is possible. See also this gist。
如果你解压缩 latest Git for Windows anywhere you want, and use a simplified PATH
,你将可以访问 200 多个 Linux 命令,包括 awk
、head
等
我可能遗漏了一些重要的东西,否则(几乎)问题中的每个陈述/假设似乎都不正确:
- 可以使用pip
安装/升级[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions
- GitHub is used to host the source code (mainly). The assets there are Mark Hammond's Win installers (since pywin32 was hosted on SourceForge - 早在 pip 诞生之前),我想它们只是为了向后兼容而构建的
- pip 不下载 pywin32 二进制文件,但 wheel 软件包来自 [PyPI]: Links for pywin32
为了演示以上所有内容,我创建了一个 VirtualEnv,并在此基础上进行了一系列步骤:
- python 和 pip 可执行文件位置/版本
- pip 测试(列表 pywin32 版本使用 pip) - 无输出(无 pywin32 已安装)
- pywin32下载并URL显示
- pywin32安装(老版本稍后测试升级)
- 点子测试
- pywin32 测试(列表pywin32版本使用pywin32)
- pywin32升级
- 点子测试
- pywin32测试
输出:
(py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\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\Whosebug\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\Whosebug\q049398198>rem pip test
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32
(py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\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\Whosebug\q049398198>rem pip test
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32
pywin32 (222)
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>rem pywin32 test
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\")[\"FileVersionLS\"] >> 16)"
222
(py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\q049398198>rem pip test
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32
pywin32 (223)
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>rem pywin32 test
(py36x64_test) e:\Work\Dev\Whosebug\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\")[\"FileVersionLS\"] >> 16)"
223
据我了解,虽然 pip install -U pypiwin32
是一种解决方法,但不能使用 pip 到 install/upgrade pywin32
。
pywin32
现在托管在 GitHub 上。我对 git
知之甚少,但知道它适用于二进制文件。有没有办法以编程方式升级 pywin32
二进制文件?也就是说,假设 pywin32
v221 安装了 Python v.3.6(64 位),程序应检查 GitHub 上的最新 (v223) 并下载 pywin32-223.win-amd64-py3.6.exe
和安装它。到目前为止,我只能想到一个类似于网络抓取的脚本,将安装的版本与网络上的最新版本进行比较,并采取相应的行动。请问有没有简单的解决办法
您可以使用 Chocolatey and its pywin32 package,但它已过时。
因此脚本解决方案为 one described in this article (for other programs, but with a similar idea) is possible. See also this gist。
如果你解压缩 latest Git for Windows anywhere you want, and use a simplified PATH
,你将可以访问 200 多个 Linux 命令,包括 awk
、head
等
我可能遗漏了一些重要的东西,否则(几乎)问题中的每个陈述/假设似乎都不正确:
- 可以使用pip 安装/升级[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions
- GitHub is used to host the source code (mainly). The assets there are Mark Hammond's Win installers (since pywin32 was hosted on SourceForge - 早在 pip 诞生之前),我想它们只是为了向后兼容而构建的
- pip 不下载 pywin32 二进制文件,但 wheel 软件包来自 [PyPI]: Links for pywin32
为了演示以上所有内容,我创建了一个 VirtualEnv,并在此基础上进行了一系列步骤:
- python 和 pip 可执行文件位置/版本
- pip 测试(列表 pywin32 版本使用 pip) - 无输出(无 pywin32 已安装)
- pywin32下载并URL显示
- pywin32安装(老版本稍后测试升级)
- 点子测试
- pywin32 测试(列表pywin32版本使用pywin32)
- pywin32升级
- 点子测试
- pywin32测试
输出:
(py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\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\Whosebug\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\Whosebug\q049398198>rem pip test (py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32 (py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\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\Whosebug\q049398198>rem pip test (py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32 pywin32 (222) (py36x64_test) e:\Work\Dev\Whosebug\q049398198>rem pywin32 test (py36x64_test) e:\Work\Dev\Whosebug\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\")[\"FileVersionLS\"] >> 16)" 222 (py36x64_test) e:\Work\Dev\Whosebug\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\Whosebug\q049398198>rem pip test (py36x64_test) e:\Work\Dev\Whosebug\q049398198>pip list 2>nul | findstr pywin32 pywin32 (223) (py36x64_test) e:\Work\Dev\Whosebug\q049398198>rem pywin32 test (py36x64_test) e:\Work\Dev\Whosebug\q049398198>python -c "import win32api as wapi;print(wapi.GetFileVersionInfo(wapi.__file__, \"\\\")[\"FileVersionLS\"] >> 16)" 223