PySerial和多个Python安装出现问题

PySerial和多个Python安装出现问题,python,pyserial,Python,Pyserial,我在Windows7机器上安装了Python 2.4.4和3.1.3。我想用PySerial 我听说它是内置的,所以我尝试在两个版本中导入序列号。两者都导致导入错误 然后我从下载了win32安装程序。我运行了它,并为2.4.4安装了它。(它说是从注册表中找到的。)我没有选择改成3.1.1版本 然后我在2.4.4中得到了以下错误: >>> import serial Traceback (most recent call last): File "<pyshell#0

我在Windows7机器上安装了Python 2.4.4和3.1.3。我想用PySerial

我听说它是内置的,所以我尝试在两个版本中导入序列号。两者都导致导入错误

然后我从下载了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
好极了。好啊这似乎太费劲了,所以我想试试Python 3.1.1。我编辑PATH环境变量以包含
C:\Python31\
,而不是
C:\Python24

我重新启动cmd并在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>
有趣。然后我尝试在Python3.1.1中从IDLE导入串行,但是我得到了标准的
ImportError
。嗯

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

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

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:我检查并修复了所有语法错误,但开始出现导入错误。在
\uuuu init\uuuuu.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 *
致:

现在我在
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
导入序列号 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 导入序列号 文件“C:\Python31\lib\site packages\serial\\uuuu init\uuuuu.py”,第19行,在 从.serialwin32导入* 文件“C:\Python31\lib\site packages\serial\serialwin32.py”,第12行,在 导入win32 ImportError:没有名为win32的模块
我试着使用
.modulename
语法,但无法编译


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

首先,为什么在Windows上使用python 2.4?它已经很旧了,而且已经有所改进(例如,ctypes),您可能需要pyserial

现在,关于您的安装问题,请不要为了使模块在一个python版本与另一个python版本之间工作而涉足PYTHONPATH。Python3是向后不兼容的,因此您不会让它自动为您为Python2.x安装的东西工作

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

当我按照网站上的安装说明进行操作时,遇到了与您类似的问题。正如上面所说的,我导航到未打包的下载文件夹并运行

# 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
导入序列号 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“serial/_init__.py”,第21行,在 从serial.serialposix导入* 文件“serial/serialposix.py”,第58行 除IOError外,e: ^ SyntaxError:无效语法
事实证明,您只需离开安装目录即可。下载文件夹中有一个名为
serial
的文件夹,它覆盖新安装的串行模块。

我使用2.4,因为我正在处理的项目需要它。如何在命令提示符下显示
python
python3
?还有,当你说“PYTHONPATH”时,你到底指的是什么?我指的是Windows控制面板中设置的path环境变量,它确定命令提示符在哪里查找命令(对吗?)。如果我将
路径
更改为包含3.1而不是2.4,这与您的第二行代码不一样吗?当您安装python3.1.x时,它一定安装了一个名为python3的二进制文件,一定要查找它。好的,你指的是windows路径,我知道你正在更改Python解释器的路径。很可能,它仍然引用Python2.x(您可以通过查看解释器来确认)。但方法是使用完整路径<代码>C:\Python31\python3.exe我试过了,它成功地使用了3.1,但我还有其他问题。(OP更新。)这是pyserial包中的一个bug。Python3.1中Exception的语法不是
除了ValueError,e:
,但它应该是
除了ValueError之外的e:
。如果你愿意,试着更换它并使用它。。还要提交一个bug,以便包维护者得到警告。
# This is suitable for python3.1
python3 setup.py install
>>> 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