PySerial与多个Python安装的问题

2 投票
2 回答
8786 浏览
提问于 2025-04-16 12:53

我在我的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

我重启了命令行,然后在pyserial上运行python setup.py install

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>

有趣。我接着在Python 3.1.1的IDLE里尝试import serial,但又遇到了标准的ImportError。嗯。

这是怎么回事?我是不是做错了什么?

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

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上运行的。(也许我下载了错误的版本?)

2 个回答

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 的文件夹,它覆盖了新安装的串口模块。

2

首先,为什么你在Windows上使用Python 2.4呢?这个版本已经很旧了,很多东西都有了改进(比如ctypes),你可能会需要这些来使用pyserial。

接下来,关于你的安装问题,请不要随便调整PYTHONPATH来让某个模块在不同的Python版本上工作。Python 3和之前的版本不兼容,所以你在Python 2.x上安装的东西不会自动在Python 3上工作。

在pyserial的网站上有一套简单的安装说明:

http://pypi.python.org/pypi/pyserial 下载压缩包。解压缩这个包,进入pyserial-x.y目录,然后运行:

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


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

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

撰写回答