2011-03-03 133 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的文件夾,它將覆蓋新安裝的串行模塊。