2

我的 Windows 7 机器上有 Python 2.4.4 和 3.1.3。我想使用 PySerial。

我听说它是​​内置的,所以我尝试import serial了两个版本。两者都引起了Import Error.

然后我从这个页面下载了 win32 安装程序。我运行了它,它安装了 2.4.4。(它说它是从注册表中找到的。)我没有选择更改为 3.1.1 版本的选项。

然后我在 2.4.4 中遇到以下错误:

>>> import serial

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in -toplevel-
    import serial
  File "C:\Python24\Lib\site-packages\serial\__init__.py", line 19, in -toplevel-
    from serialwin32 import *
  File "C:\Python24\Lib\site-packages\serial\serialwin32.py", line 11, in -toplevel-
    import ctypes
ImportError: No module named ctypes

我查了一下ctypes,发现它是从 2.5.5 开始内置的。好的。

我下载ctypes并运行python setup.py install。(2.4.4.)

我得到以下信息:

C:\path\to\ctypes-1.0.2>python setup.py install
running install
running build
running build_py
running build_ext
error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

甜的。好的。这似乎太费力了,所以我想尝试使用 Python 3.1.1。我编辑我的 PATH 环境变量以包含C:\Python31\而不是C:\Python24.

我重新启动 cmd 并python setup.py install在 pyserial 上运行:

C:\path\to\pyserial-2.5>python setup.py install
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts

C:\path\to\pyserial-2.5>

有趣的。然后我尝试import serial从 Python 3.1.1 中的 IDLE 开始,但我得到了标准的ImportError. 唔。

这里发生了什么?难道我做错了什么?

更新:我尝试setup.py install使用 3.1.1 运行:

c:\path\to\pyserial-2.5>c:\python31\python.exe setup.py install
running install
running build
running build_py
running build_scripts
creating build\scripts-3.1
copying and adjusting examples\miniterm.py -> build\scripts-3.1
running install_lib
creating c:\python31\Lib\site-packages\serial
copying build\lib\serial\loopback_connection.py -> c:\python31\Lib\site-packages
\serial
copying build\lib\serial\rfc2217.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\serialcli.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\serialjava.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\serialposix.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\serialutil.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\serialwin32.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\sermsdos.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\socket_connection.py -> c:\python31\Lib\site-packages\s
erial
copying build\lib\serial\win32.py -> c:\python31\Lib\site-packages\serial
copying build\lib\serial\__init__.py -> c:\python31\Lib\site-packages\serial
byte-compiling c:\python31\Lib\site-packages\serial\loopback_connection.py to lo
opback_connection.pyc
  File "c:\python31\Lib\site-packages\serial\loopback_connection.py", line 101
    except ValueError, e:
                     ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\rfc2217.py to rfc2217.pyc
  File "c:\python31\Lib\site-packages\serial\rfc2217.py", line 370
    except Exception, msg:
                    ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\serialcli.py to serialcli.py
c
  File "c:\python31\Lib\site-packages\serial\serialcli.py", line 39
    except Exception, msg:
                    ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\serialjava.py to serialjava.
pyc
  File "c:\python31\Lib\site-packages\serial\serialjava.py", line 67
    except Exception, msg:
                    ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\serialposix.py to serialposi
x.pyc
  File "c:\python31\Lib\site-packages\serial\serialposix.py", line 64
    50:      0000001,
                   ^
SyntaxError: invalid token

byte-compiling c:\python31\Lib\site-packages\serial\serialutil.py to serialutil.
pyc
  File "c:\python31\Lib\site-packages\serial\serialutil.py", line 510
    except TypeError, err:
                    ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\serialwin32.py to serialwin3
2.pyc
byte-compiling c:\python31\Lib\site-packages\serial\sermsdos.py to sermsdos.pyc
byte-compiling c:\python31\Lib\site-packages\serial\socket_connection.py to sock
et_connection.pyc
  File "c:\python31\Lib\site-packages\serial\socket_connection.py", line 49
    except Exception, msg:
                    ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\win32.py to win32.pyc
  File "c:\python31\Lib\site-packages\serial\win32.py", line 164
    MAXDWORD = 4294967295L # Variable c_uint
                         ^
SyntaxError: invalid syntax

byte-compiling c:\python31\Lib\site-packages\serial\__init__.py to __init__.pyc
running install_scripts
creating c:\python31\Scripts
copying build\scripts-3.1\miniterm.py -> c:\python31\Scripts
running install_egg_info
Writing c:\python31\Lib\site-packages\pyserial_py3k-2.5-py3.1.egg-info


c:\path\to\pyserial-2.5>

嗯...看起来我使用的 pyserial 版本不正确。这个下载页面使它看起来像 2.5 是最新的。奇怪的。

更新 2:我检查并修复了所有语法错误,但开始出现导入错误。在__init__.py中,我改变了:

if os.name == 'nt': #sys.platform == 'win32':
    from serialwin32 import *
elif os.name == 'posix':
    from serialposix import *
elif os.name == 'java':
    from serialjava import *

至:

if os.name == 'nt': #sys.platform == 'win32':
    from .serialwin32 import *
elif os.name == 'posix':
    from .serialposix import *
elif os.name == 'java':
    from .serialjava import *

现在我收到一个错误serialwin32.py

>>> import serial
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    import serial
  File "C:\Python31\lib\site-packages\serial\__init__.py", line 19, in <module>
    from .serialwin32 import *
  File "C:\Python31\lib\site-packages\serial\serialwin32.py", line 12, in <module>
    import win32
ImportError: No module named win32

我尝试执行.modulename语法,但无法编译。

我还能在这里做什么?我很难相信有人打算让这段代码在 Python 3 上运行。(也许我得到了错误的版本?)

4

2 回答 2

2

首先,你为什么在 Windows 上使用 python 2.4?它已经很老了,而且事情得到了改进(例如 ctypes),你可能需要那些用于 pyserial 的东西。

现在,关于您的安装问题,请不要涉足 PYTHONPATH 以使模块适用于一个 python 版本与另一个版本。Python 3 是向后不兼容的,所以你不会让它自动为你为 Python 2.x 安装的东西工作。

pyserial 网站中给出了一组简单的说明:

从http://pypi.python.org/pypi/pyserial下载存档。解压压缩包,进入pyserial-xy目录,运行:

# This will be suitable for python2.5
python setup.py install


# This is suitable for python3.1
python3 setup.py install

请注意,我python3在第二种情况下使用解释器。

于 2011-03-03T05:43:34.777 回答
0

当我按照网站上的安装说明进行操作时,我遇到了与您类似的问题。就像它说的那样,我导航到解压缩的下载文件夹并运行

# This is suitable for python3.1
python3 setup.py install

但是,当我运行时import serial,我得到了类似的语法错误:

>>> import serial
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "serial/__init__.py", line 21, in <module>
    from serial.serialposix import *
  File "serial/serialposix.py", line 58
    except IOError, e:
                  ^
SyntaxError: invalid syntax

事实证明,您只需要离开安装目录即可。下载文件夹有一个名为serial覆盖新安装的串行模块的文件夹。

于 2015-03-26T16:36:45.170 回答