首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从python包启动子模块?

如何从python包启动子模块?
EN

Stack Overflow用户
提问于 2015-01-15 13:55:22
回答 1查看 68关注 0票数 2

我正在和我的实验室做一个机器人项目。(Github)大多数主要组件都已完成并记录在案。设置如下:

  • 我们在基站上运行opstn。它有一个服务器,用于与机器人通信控制器位置。
  • 我们在一个运行在机器人上的覆盆子上运行rpi。这两个人通过wifi进行通信,并有一个静态地址。raspberry pi有一个客户端程序,当它有时间时请求控制器位置,决定如何运行马达。
  • raspberry pi通过USB与mbed通信,以允许硬件PWM。
  • raspberry pi还将与I2C设备一起监视数据,并将其传送回基站进行处理。这最终将作为一个单独的服务器进程运行,并且基站将有一个客户端进程与它通信。
  • 基站可能需要有一个客户端模块来解释设备数据,作为一个单独的进程运行。

该代码确实有效,但我们必须以一种比较长的方式运行它:

  • 在基站上,cd转换为kaginawapython -m opstn,运行opstn/__main__.py
  • SSH进入覆盆子皮,cd进入kaginawapython -m rpi,运行rpi/__main__.py

我想知道如何正确地启动子模块。对于rpi/__main__.py,我考虑在__main__.py中提供两个功能(电机控制客户端和设备服务器),并使用multiprocessing来运行它们。实验似乎表明这是可行的。

不过,我想要做的是将我的目录压缩到一个可执行文件中,然后简单地使用./start_robot。这就是Makefile所做的,而且工作得很好。然而,无论我尝试什么,我似乎根本无法启动opstn。我也需要使用SSH,因为我需要用sudo启动sudo。我可能可以使用paramiko使用本答复来完成这个任务。

如果可能的话,我正在考虑使用os.uname()[1]来检查它是否在raspberry pi上,并启动rpi,否则就启动opstn

tl;博士,如何从python包的根__main__.py启动包含__main__.py的子模块?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-16 18:30:34

项目中的toplevel目录不应该是Python包。它可能是一个带有setup.py的目录。

您不应该在package中使用cd。将您的zip放在PYTHONPATH中的某个地方(通过print(sys.path)检查),并使用绝对名称运行子模块,例如,运行:

代码语言:javascript
复制
$ python -m kaginawa.opstn

运行kaginawa/opstn/__main__.py脚本或运行:

代码语言:javascript
复制
$ python -m kaginawa.rpi

运行kaginawa/rpi/__main__.py

如果您想选择在运行时运行什么,那么可以在kaginawa.opstn.main()kaginawa.rpi.main()函数中调用kaginawa/__main__.py。然后运行它:

代码语言:javascript
复制
$ python -mkaginawa

你可以直接运行拉链

为了简化包含依赖项,可以使用PyInstaller、cx_Freeze捆绑代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27964993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档