2011-03-03 168 views
2

我的Windows 7机器上有Python 2.4.4和3.1.3。我想使用PySerial。PySerial和多个Python安装的问题

我听说它是​​内置的,所以我在两个版本中尝试了import serial。两者都导致Import Error

然后我从this page下载了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 

我抬头一看​​,并认为它已经从2.5.5储存卡英寸好。

我下载​​,并运行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和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的版本不正确。 This download page使它看起来像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

首先,为什么你在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在第二种情况下。

+0

我正在使用2.4,因为我正在处理的项目需要它。我如何在命令提示符下使用'python'和'python3'? – 2011-03-03 15:22:42

+0

另外,当你说'PYTHONPATH'时,你指的是什么?我指的是Windows控制面板中设置的路径环境变量,它决定了命令提示符查找命令的位置(对吗?)。如果我将'path'改为包含3.1而不是2.4,是不是与第二行代码做同样的事情? – 2011-03-03 15:43:15

+0

当您安装python3.1.x时,它必须已经安装了一个名为python3的二进制文件,请查找它。好吧,你的意思是windows PATH,我知道你正在改变Python解释器的路径。可能它仍然是指Python 2.x(你可以通过解释器来确认)。但方式是使用完整的路径。 'C:\ Python31 \ python3.exe' – 2011-03-03 15:53:10

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