2015-01-24 3 views
0

У меня есть собственный скрипт python, который зависит от и библиотеки pySerial. Я пытаюсь развернуть его на маршрутизаторе, который запускает интерпретатор python.Проблема с развертыванием pySerial

MinimalModbus - это всего лишь один файл .py, который тривиально развертывать. Однако библиотека pySerial представляется гораздо более надежной. Это похоже на несколько файлов python, которые работают вместе, чтобы «автоматически выбрать соответствующий бэкэнд».

Нужно ли «установить» pySerial, чтобы использовать его? Или есть способ извлечь только подходящие файлы/зависимости для данной ОС?

Я не знаю, что все выполняется, когда вы запускаете setup.py pySerial (например, файлы, скопированные?). Я не знаю, будет ли это работать для такого типа развертывания. Я надеялся просто указать конкретные файлы.

Любая помощь будет оценена по достоинству.

Мы используем Python версии 2.6.

Update:

Я в основном взял «установленные» файлы из/пакетов участка/серийной папки на моем окне развития и загрузив их в устройство. Это привело меня немного дальше; Однако, сейчас я получаю следующее сообщение об ошибке:

enter image description here

Line ~ 273 serialposix.py, это призывающее:

self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK) 

Почему бы не быть в состоянии найти os.open рутину?

Update 2:

Дальнейшее упрощение задачи, мой сценарий теперь состоит из чего-то же просто, как в следующем, и он все еще терпит неудачу с такой же ошибкой:

import os 
serfd = os.open("/com/0", os.O_RDWR | os.O_NONBLOCK) 

Под Python Standard Modules with Digi-Specific behavior, они внесите следующий комментарий о модуле os:

Использование модуля os в устройствах Digi в настоящее время очень ограничено. Основная цель заключается в том, чтобы разрешить доступ к последовательным портам, которые представлены в виде узлов в файловой системе. Последовательные порты доступны в виде файлов с контуром в форме/com/0, при этом нуль заменяется индексом на основе нуля последовательного порта для управления.

Кроме того, оба их примерных приложения используют процедуру os.open для последовательной связи.

Я бы ожидал увидеть ошибку, такую ​​как: OSError: [Errno 2] Нет такого файла или каталога: '/ com/0', но это не тот случай. Python даже не может найти программу os.open.

Вы ожидаете, что файл os.py будет иметь определенную процедуру def open(...)?

+0

Не можете ли вы что-то сделать для вас, например [pip] (https://pypi.python.org/pypi/pip/)? –

+0

Я все еще узнаю об этом устройстве (маршрутизаторе) и питоне, но я не думаю, что у маршрутизатора есть «традиционная» установка python. Все основные библиотеки и файлы python содержатся в архиве с именем python.zip. Я верю во время выполнения, еще один компонент python с именем zipimport «извлекает» эти файлы, запускает программу и очищает их. Вы когда-нибудь слышали об этом? Я добавил файлы pySerial в свой собственный zip-файл, который ведет себя аналогичным образом. Но что-то еще не совсем верно ... –

+0

'serialposix' не должен использоваться в Windows IIRC, см. Https://github.com/makerbot/pyserial/tree/master/serial pyserial' __init__' импортирует фактические функции из posix или окон или реализация Java. общие функции в serialutil. У вас есть родной win32 python или какая-то DIY-сборка? возможно, mingw? –

ответ

1

После открытия дела поддержки с производителем данного маршрутизатора, его что функция os.open не поддерживается на этом устройстве. Однако устройство поддерживает io.open, который, я считаю, схож. Что еще более важно, я узнал, что производитель предоставляет свою собственную «pyserial» реализацию, специально разработанную для работы с операционной системой устройства. Внутри, похоже, они отключили звонки, чтобы использовать эквивалент io.open.

0

, просмотрев исходные файлы, я считаю, что он полностью основан на python, и когда он устанавливает его, он копирует файлы в папку сайтов-пакетов.

, указав, что вам нужно несколько исходных файлов для его работы, и если вы просто копируете их через них, возможно, потребуется изменить их импорт, чтобы обеспечить их правильную работу.

например, для Linux вам потребуется файл serialposix.py и serialutil.py

вам может понадобиться больше, чем только это, но я только имел быстрый взгляд через.

, но в верхней части serialposix.py есть строка:

from serial.serialutil import * 

это будет необходимо изменить:

from serialutil import * 

и там могут быть и другие подобные изменения, чтобы сделать.

но в конечном итоге это, похоже, использует ctypes, чтобы выполнить тяжелую работу, разговаривая с базовой ОС, чтобы вы могли заставить ее работать.

ОБНОВЛЕНИЕ: , чтобы объяснить, почему он вызывает os.open, на большинстве платформ последовательные порты обрабатываются почти как файлы, в том, что возвращает дескриптор «file like», идея pyserial заключается в абстрактной разности уровней операционной системы чтобы создать единый простой интерфейс для них, но в конечном итоге он по-прежнему рассматривается как файл, похожий на дескриптор ОС.

для уточнения разъясните пожалуйста, сообщите нам, какая версия pyserial вы используете? как номер строки, которую вы цитировали, и то, что я смотрю, не совпадают.

Я подозреваю, что основная причина, по которой вы испытываете трудности, - это почтовый характер развертывания python, который вы используете, но мне трудно поверить, что ОС не включена в него, проверили ли вы файл python ОС в ZIP или это скомпилированный файл python?

UPDATE 2: имеющ посмотрел на документации для дистрибутива вы используете я хотел бы предложить вы прочитанный через следующее:
Python Standard Modules with Digi-Specific Behavior

где говорится, что некоторые Funtionality ограничен на этих устройствах, это также дает метод, с помощью которого вы можете проверить, поддерживает ли он telnet/SSH в устройстве и пытается использовать его в командной строке python.

также, в то время как это anot, как аккуратный и легкий в использовании в качестве pyserial модуля, я предлагаю вам это начитался:
Digi Serial Port Access

+0

Благодарим вас за ответ. См. Раздел «Обновление» в исходном вопросе. Надеюсь, вы можете дать дополнительные рекомендации. –

+0

Как оказалось, я использую pySerial версии 2.5. Я честно думал, что я загрузил 2.7. Я переключусь на последний код, но я не думаю, что это проблема здесь. Файл os python в ZIP-архиве на самом деле скомпилирован код python - он имеет расширение .pyc. Может ли скомпилированный код работать вместе с некомпилированным? Я чрезвычайно новичок в разработке python :) –

+0

на обычном дистрибутиве python при импорте обычного файла python, он сначала компилирует его, и вы получаете скомпилированный и простой текстовый файл рядом друг с другом, так как ваш zip-дистрибутив я не знаю, как/если это будет работать, из любопытства, где вы получили свой питон python, чтобы я мог прочитать его? –