Module 如何在Choregraph中的应用程序中导入模块(使用其中相对较大的包)?

Module 如何在Choregraph中的应用程序中导入模块(使用其中相对较大的包)?,module,package,python-import,choregraphe,Module,Package,Python Import,Choregraphe,这些天来,我在Github项目的帮助下生成了一个应用程序,这让我很为难: 它在开始时确实工作得很好,但在我在文件夹中添加了一些名为“scripts”(如图1)的模块之后,就不再工作了。我的基本想法是将类从“intersectionpointoftwoircles.py”导入到“main_localization.py”,以使主要工作变得更好。 由于“IntersectionPointOfTwoCircles.py”中需要“sympy”和“numpy”两个包,首先我尝试将这两个包放在“scrip

这些天来,我在Github项目的帮助下生成了一个应用程序,这让我很为难:

它在开始时确实工作得很好,但在我在文件夹中添加了一些名为“scripts”(如图1)的模块之后,就不再工作了。我的基本想法是将类从“intersectionpointoftwoircles.py”导入到“main_localization.py”,以使主要工作变得更好。

由于“IntersectionPointOfTwoCircles.py”中需要“sympy”和“numpy”两个包,首先我尝试将这两个包放在“scripts”文件夹中,但这导致了这样的情况:编舞通常只在大约5到10分钟后才做出反应,有时甚至没有反应。 以下是编排pml文件“本地化”的路径:

然后我现在就让软件包在app文件夹之外

“Main_本地化”的代码为:

class MyClass(GeneratedClass):
    executable_id = "localization"
    def onLoad(self):
        self.listener_id = None
        self.executable_manager = self.session().service("ALServiceManager")
        executable_name = self.getParameter("Executable Name")
        if ALProxy("ALSystem").systemVersion() < "2.3":
            self.executable_id = executable_name
        if "." not in executable_name:
            self.logger.info("Warning: You will have conflicts if several packages have executables called '%s'" % executable_name)
            self.logger.info("Use a newer version of NAOqi to have executables prefixed with the package ID, or prefix it yourself, in the form with <package>.<executable ID>")
        else:
            self.executable_id = self.packageUid() + "." + executable_name

    def disconnect(self):
        try:
            self.executable_manager.serviceStopped.disconnect(self.listener_id)
        except Exception as e:
            pass

    def onUnload(self):
        self.executable_manager.stopService(self.executable_id)
        self.disconnect()

    def onInput_onStart(self):
        self.listener_id = self.executable_manager.serviceStopped.connect(self.onExecutableStopped)
        if not self.executable_manager.startService(self.executable_id):
            self.logger.info("Failed to start App Executable '%s', stopping." % repr(self.executable_id))
            self.onStopped()
            self.disconnect()

    def onExecutableStopped(self, stopped_executable, reason):
        if stopped_executable == self.executable_id:
            self.logger.info("App Executable Stopped: " + self.executable_id)
        self.onStopped()
        self.disconnect()

    def onInput_onStop(self):
        self.onUnload()
        self.onStopped()

有人知道我现在可以做什么吗?

您的python库确实应该在您的包中,最好是在您的“脚本”文件夹和其他python模块中,以便您可以导入它们

如果库很大,这可能确实会使您的项目变得相当大,因此使用Choregraph进行安装的速度会非常慢,但如果您希望包含这些库,则这是不可避免的。当您将这些库放在“应用程序”之外时文件夹它们不会包含在复制到robot的包中,因此一旦安装到robot上,它就无法工作

但是-numpy应该已经安装在您的机器人上,不需要将其包含在您的软件包中!这可能足以使您的软件包更小(numpy相当大)

(编辑)您也可以使用PIP安装库,如下所示:


您需要对每个要使用软件包的机器人执行相同的精简操作。

太遗憾了。我希望如此。但是sympy软件包比numpy大50%。§"我没有其他方法可以解决这个问题吗?顺便说一句,自版本2.5.5.5以来,我的this robot一直在使用这个软件包(考虑不兼容)没有更新。另一个更新了NAOqi版本2.7的机器人似乎没有更好地处理这个问题。你也可以使用pip,我在我的回答中添加了这一点。谢谢,我已经尝试过了。你能告诉我pip安装和通过“将软件包安装到机器人”来安装有什么区别吗。。。“from Choregraph is?”在通过SSH pip安装Symphy之后,我是否只需要删除“scripts”文件夹中的包Symphy和main.py的导入部分,或者我还必须做什么?
[INFO ] .box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1081224720:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 
[INFO ] behavior.box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1069884112:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 
[INFO ] behavior.box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1149770056:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 
pip install --user --upgrade pip

/home/nao/.local/bin/pip install --user whatever-package-you-need