在一个项目中使用hideous RoboClaw Python "library",我似乎无法摆脱他们抛出一堆处理与物理硬件接口的函数和全局变量到文件中的事实。不幸的是,我坚持使用这个库,因为当供应商为他们的板发布一个新的固件时,他们也会在他们的网站上更新这个文件;将它移植到有用的东西将是一个持续的努力。封装导入模块的范围
当我尝试多次导入它时,就会出现问题,一次对于每个连接到USB的电路板。东西(概念),这样将是理想的:
import roboclaw
class Board:
def __init__(self):
self.rc = roboclaw
由于Python解释似乎保持在内存中的每个进口同一模块的参考,我似乎无法得到它的创建中存在不同的命名空间的实例当所有主板不正确地分配给相同的设备文件时,本质上都会吐出各种I/O冲突错误。我似乎能够得到的最接近的是this answer provided by Noctis Skytower,但它仍然没有为每个Board
实例创建单独的名称空间。
此外,我曾尝试使用imp
(如this)和importlib
(如this),虽然这两个导入失败,因为他们无法找到roboclaw.py
文件在同一目录下坐在建立动态的进口。
由于我以前从来没有处理过这个问题,所以我应该继续这个方向,这有点不知所措。
哦上帝,太可怕了!我想出了一种方法来覆盖全局命名空间,所以我会立刻发布一个可能的解决方案。 –