【发布时间】:2015-01-24 16:15:10
【问题描述】:
我有一个依赖于MinimalModbus 和pySerial 库的自定义python 脚本。我正在尝试将其部署到运行 python 解释器的路由器。
MinimalModbus 只是一个易于部署的 .py 文件。但是,pySerial 库似乎更加健壮。它看起来像几个 python 文件一起工作以“自动选择适当的后端”。
是否必须“安装”pySerial 才能使用它?或者有什么方法可以只提取给定操作系统的相关文件/依赖项?
我不知道当你运行 pySerial 的 setup.py 时执行了哪些操作(例如,文件被复制了?)。我不知道它是否适用于这种特定类型的部署。我希望只包含特定文件。
任何帮助将不胜感激。
我们使用的是 Python 2.6 版。
更新:
我基本上是从我的开发盒上的 /site-packages/serial 文件夹中获取“已安装”的文件并将它们上传到设备。这让我更进一步;但是,我现在收到以下错误:
serialposix.py 的 ~273 行,它正在调用:
self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK)
为什么找不到os.open 例程?
更新 2:
进一步简化问题,我的脚本现在包含如下简单的内容,但它仍然失败并出现相同的错误:
import os
serfd = os.open("/com/0", os.O_RDWR | os.O_NONBLOCK)
在Python Standard Modules with Digi-Specific behavior 下,他们对 os 模块做出以下评论:
目前在 Digi 设备中使用 os 模块非常有限。公开它的主要目的是允许访问串行端口,这些端口在文件系统中显示为节点。串行端口可作为文件使用,路径格式为 /com/0,其中零替换为要控制的串行端口的从零开始的索引。
此外,他们的两个示例应用程序都使用 os.open 例程进行串行通信。
我本以为可能会看到如下错误:OSError: [Errno 2] No such file or directory: '/com/0',但事实并非如此。 Python 甚至找不到 os.open 例程。
您是否希望 os.py 文件定义 def open(...) 例程?
【问题讨论】:
-
你不能用一些东西来为你安装,比如pip吗?
-
我还在学习这个设备(路由器)和 python,但我认为路由器没有“传统”的 python 安装。所有主要的 Python 库和文件都包含在名为 python.zip 的存档中。我相信在运行时,另一个名为 zipimport 的 python 组件会“提取”这些文件,运行程序并清理它们。你听说过这样的事吗?我已经在他们自己的 zip 文件中添加了 pySerial 文件,它们的行为类似。但还是有些不太对劲……
-
serialposix不应在 Windows IIRC 上使用,请参阅 github.com/makerbot/pyserial/tree/master/serial pyserial 的__init__从 posix 或 windows 或 java 实现导入实际函数。常用函数在serialutil中。你有原生的 win32 python 或一些 DIY 版本吗?也许是 mingw?