Проблема с PySerial и несколькими установками Python - PullRequest
2 голосов
/ 03 марта 2011

У меня есть Python 2.4.4 и 3.1.3 на моей машине с Windows 7. Я хотел бы использовать 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 из IDLE в Python 3.1.1, но я получаю стандарт 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. (Возможно, я получил неправильную версию?)

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Прежде всего, почему вы используете Python 2.4 на Windows? Он довольно старый, и все улучшается (например, ctypes), и вам могут понадобиться такие для pyserial.

Теперь, перейдя к вашему вопросу установки, пожалуйста, не балуйтесь PYTHONPATH, чтобы модуль работал для одной версии Python против другой. Python 3 обратно несовместим, поэтому он не будет работать автоматически для того, что вы устанавливаете для Python 2.x.

На веб-сайте 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 во втором случае.

0 голосов
/ 26 марта 2015

У меня была проблема, похожая на вашу, когда я следовал инструкциям по установке с веб-сайта.Как я уже сказал, я вошел в распакованную папку загрузки и запустил

# 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, которая переопределяет вновь установленный последовательный модуль.

...