Cri*_*ati 7 python windows dll pywin32 python-3.8
Python 3.8.0最近发布(发布于20191014,可从[Python]: Python 3.8.0下载)。
PyWin32已经在[PyPI]上构建了它:pywin32 225(发布于20190915)。不幸的是,在pip installing之后,它不起作用。
样本:
Run Code Online (Sandbox Code Playgroud)[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058631512]> sopr.bat *** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages *** [prompt]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import win32api >>> ^Z [prompt]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe" Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import win32api Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: DLL load failed while importing win32api: The specified module could not be found. >>> ^Z
注意事项:
Cri*_*ati 13
应用#2.2。(从下面)到原始.whl s,并在[GitHub]上发布它们:CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyWin32/v225 ( win_amd64 , win32 for Python 3.8 )。
安装(其中之一)后,现有代码应该可以OOTB(关于此问题)。
安装步骤:
下载与您的Python架构匹配的.whl(64 位、32 位- 有关获取Python架构的更多详细信息,请查看[SO]:如何确定我的 Python shell 在 OS X 上以 32 位还是 64 位模式执行?(@CristiFati 的回答) )(问题是关于OSX 的,但其他平台也包括在内)),它很可能是64 位(win_amd64),来自上面的URL。
比如我在L:\Downloads下载
在其上调用PIP安装程序([SO]: How to install a package for a specific Python version on Windows 10? (@CristiFati's answer))。就像是:
(${path_to_your})python.exe -m pip ${path_to_the_downloaded_pywin32_whl}
Run Code Online (Sandbox Code Playgroud)
例子:
"e:\Work\Dev\VEnvs\py_pc064_03.08.00_test0\Scripts\python.exe" -m pip "L:\Downloads\pywin32-225-cp38-cp38-win_amd64.whl"
Run Code Online (Sandbox Code Playgroud)
该问题已在[GitHub]上报告: mhammond/pywin32 - python 3.8。
上面的URL引用了另外 2 个:
- 扩展模块的 DLL 依赖项和在 Windows上加载ctypes 的DLL现在可以更安全地解决。仅搜索系统路径、包含 DLL 或 PYD 文件的目录以及使用add_dll_directory()添加的目录以查找加载时依赖项。具体来说,不再使用 PATH 和当前工作目录,对它们的修改将不再对正常的 DLL 解析产生任何影响。
此搜索路径用于解析导入的扩展模块的依赖项(模块本身通过 解析
sys.path),也用于ctypes。
同时,我自己进行了一些挖掘,发现(对于win32api.pyd)它是pywintypes38.dll(它是.pyd的依赖项)未找到(我还在对问题)。
解决方案(实际上是变通方法(或多或少),直到发布官方和向后兼容的修复程序):
通过在任何PyWin32模块之前导入它来强制加载pywintypes38.dll(因为它也是一个Python模块,在这种情况下它不属于上述规则):
(${path_to_your})python.exe -m pip ${path_to_the_downloaded_pywin32_whl}
Run Code Online (Sandbox Code Playgroud)
如果使用COM,你需要import pythoncom
将pywin32_system32添加到.dll搜索路径(遵循上面的新模型)。有多种方式:
v-python来自问题URL的评论,它提供了一个小片段(我没有测试过)
我还提交了[GitHub]: mhammond/pywin32 - Support for Python 3.8,我在pywin32.pth文件中执行所有操作(在解释器启动时“执行”,因此无需更改现有代码)。不幸的是,AppVeyor自动化测试存在一个问题,它失败了(但由于其他一些原因),所以它已经卡在那里一段时间了。请注意,在此期间,该PR被关闭,另一个(类似)的方式被推倒。请注意,包含修复程序的v226(于20191110发布)不适用于VirtualEnv( [SO]: PyWin32 (226) 和虚拟环境(@CristiFati 的回答))。
无论如何,在本地应用更改(1)(在我的Python VirtualEnv 上),解决了问题(一方面,没有破坏另一个):
Run Code Online (Sandbox Code Playgroud)"e:\Work\Dev\VEnvs\py_pc064_03.08.00_test0\Scripts\python.exe" -m pip "L:\Downloads\pywin32-225-cp38-cp38-win_amd64.whl"
其他方式,如复制.dll s(例如在%SystemRoot%\System32 中),或符号链接它们,但(个人)我不会推荐那些
[PyPI]:pywin32 227(解决了这个问题),发布于20191114!
| 归档时间: |
|
| 查看次数: |
21349 次 |
| 最近记录: |