我无法在XP上导入pywinauto
。
我有一台运行Windows 7的计算机和一台运行XP的VM。这两个版本都有几乎相同的Python版本。
以下是每个环境中Python27文件夹之间差异的图片:http://i.stack.imgur.com/ao4R7.png
这似乎是无关紧要的差异,特别是涉及到相关包装时。
如果我在XP VM上尝试import pywinauto
,我会得到以下结果:
>>> import pywinauto.controls
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pywinauto\__init__.py", line 28, in <module>
import findwindows
File "C:\Python27\lib\site-packages\pywinauto\findwindows.py", line 37, in <module>
import controls
File "C:\Python27\lib\site-packages\pywinauto\controls\__init__.py", line 33,in <module>
import win32_controls
File "C:\Python27\lib\site-packages\pywinauto\controls\win32_controls.py", line 31, in <module>
from pywinauto import win32functions
ImportError: cannot import name win32functions
>>>
我没有尝试重新安装pywinauto
或pywin32
。在我尝试之前,我只是想知道在XP和7之间pywinauto是否有任何问题?或者在本机窗口和VM之间?
答案 0 :(得分:0)
好吧,我想我已经明白了,虽然我不知道为什么。我的问题是我的原始问题的根本原因是我得到了
sre_constants.error nothing to repeat
当我尝试在XP虚拟环境中编译我的程序时。原因在于C:\Python27\Lib\site-packages\pywinauto\tests\asianhotkey.py
第110行。
_asianHotkeyRE = re.compile (r"""
\(&.\) # the hotkey
(
(\t.*)| # tab, and then anything
#(\\t.*)| # escaped tab, and then anything
(\(.*\) # anything in brackets
)|
\s*| # any whitespace
:| # colon
(\.\.\.)| # elipsis
>| # greater than sign
<| # less than sign
(\n.*) # newline, and then anything
\s)*$""", re.VERBOSE)
我甚至无法在虚拟XP环境中以自己的脚本运行它。如果我删除其中任何一行中的*
\s*| # any whitespace
或
\s)*$""", re.VERBOSE)
我不知道为什么会这样,只是实验结果。
无论如何,据我所知,变量_asianHotkeyRE
仅在整个包中使用一次;在同一档案的第(133)行:
found = _asianHotkeyRE.search(text)
所以我将这两组代码改为
pattern = r"""
\(&.\) # the hotkey
(
(\t.*)| # tab, and then anything
#(\\t.*)| # escaped tab, and then anything
(\(.*\) # anything in brackets
)|
\s*| # any whitespace
:| # colon
(\.\.\.)| # elipsis
>| # greater than sign
<| # less than sign
(\n.*) # newline, and then anything
\s)*$"""
和
found = re.search(pattern,text)
使用正则表达式编译的东西不喜欢这种模式的格式。也许在该虚拟机上安装的re
版本不是最新的或什么?
这么长的故事简短,它是固定的。我不知道为什么,如果有人可以尝试使用他们自己的任何虚拟环境重现问题,我会喜欢它。